「设计模式 JavaScript 描述」代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。...❞ 虽然小明的故事以悲剧收场,不管怎样,我们还是先用代码来描述一下小明追女神的过程,先看看不用代理模式的情况: const Flower = function () {}; const xiaoming...代理的意义 不过是实现一个小小的图片预加载功能,即使不需要引入任何模式也能办到,那么引入代理模式的好处究竟在哪里呢?下面我们先抛开代理,编写一个更常见的图片预加载函数。...其他代理模式 代理模式的变体种类非常多,限于篇幅及其在 JavaScript 中的适用性,本文只简约介绍一下这些代理,就不一一详细展开说明了。...小结 代理模式包括许多小分类,在 JavaScript 开发中最常用的是「虚拟代理」和「缓存代理」。虽然代理模式非常有用,但我们在编写业务代码的时候,往往不需要去预先猜测是否需要使用代理模式。
「设计模式 JavaScript 描述」策略模式 在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。...这种解决方案就是本章将要介绍的「策略模式」。 ❝策略模式的定义是:「定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。」 ❞ 1. 使用策略模式计算奖金 策略模式有着广泛的应用。...1.3 使用策略模式重构代码 经过思考,我们想到了更好的办法——使用策略模式来重构代码。策略模式指的是「定义一系列的算法,把它们一个个封装起来。」...在给出 Validator 类的代码之前,有必要提前了解用户是如何向 Validator 类发送请求的,这有助于我们知道如何去编写 Validator 类的代码。...策略模式的优缺点 策略模式是一种常用且有效的设计模式,本文提供了计算奖金、、表单校验这两个例子来加深大家对策略模式的理解。从这两个例子中,我们可以总结出策略模式的一些优点。
「设计模式 JavaScript 描述」组合模式 在程序设计中,有一些和“事物是由相似的子事物构成” 类似的思想。...组合模式的用途 组合模式将对象组合成树形结构,以表示“部分—整体”的层次结构。...组合模式可以非常方便地描述对象部分—整体层次结构。 利用对象多态性统一对待组合对象和单个对象。利用对象的多态性表现,可以使客户端忽略组合对象和单个对象的不同。...何时使用组合模式 组合模式如果运用得当,可以大大简化客户的代码。一般来说,组合模式适用于以下这两种情况。 表示对象的部分—整体层次结构。组合模式可以方便地构造一棵树来表示对象的部分—整体结构。...组合对象和叶对象会各自做自己正确的事情,这是组合模式最重要的能力。 7. 小结 本文我们了解了组合模式在 JavaScript 开发中的应用。组合模式可以让我们使用树形方式创建对象的结构。
「设计模式 JavaScript 描述」命令模式 假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜...,但从中可以看到我们是如何把请求发送者和请求接收者解耦开的。...command 对象可以被四处传递,所以在调用命令的时候,客户(Client)不需要关心事情是如何进行的。 跟策略模式一样,命令模式也早已融入到了 JavaScript 语言之中。...我们比较关注的问题是,一个动画结束后该如何通知队列。通常可以使用回调函数来通知队列,除了回调函数之外,还可以选择「发布—订阅模式」。...下面我们看看如何逐步创建一个宏命令。
「设计模式 JavaScript 描述」单例模式 ❝单例模式的定义是:「保证一个类仅有一个实例,并提供一个访问它的全局访问点。」...❞ 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的 window 对象等。在 JavaScript 开发中,单例模式的用途同样非常广泛。...obj ){ obj = xxx; } 现在我们就把如何管理单例的逻辑从原来的代码中抽离出来,这些逻辑被封装在 getSingle 函数内部,创建对象的方法 fn 被当成参数动态传入 getSingle...小结 单例模式是我们学习的第一个模式,我们先学习了传统的单例模式实现,也了解到因为语言的差异性,有更适合的方法在 JavaScript 中创建单例。...单例模式是一种简单但非常实 用的模式,特别是惰性单例技术,在合适的时候才创建对象,并且只创建唯一的一个。
一、生活场景 1、场景描述 在移动互联网没有普及之前,去饭店吃饭的流程大致如下:选座位,排队,点菜,结账。...3、代码实现 /** * 外观模式描述饭店就餐流程 */ public class C01_InScene { public static void main(String[] args)...1、基本简介 外观模式是对象的结构模式,客户端与一个子系统的通信必须通过一个统一的外观对象进行。...外观模式提供一个高层次的接口,使得子系统更易于使用。 2、模式图解 ? 3、核心角色 外观角色 客户端可以调用这个角色的方法。此角色具有相关的子模块的功能。...如果过多的使用外观模式,会让子模块功能的维护变的复杂,一个功能方法改变,会牵扯到多个外观对象的改变。
+tree +dir1 +dir2 -dir2Leaf.txt -leaf1.txt -leaf2.txt -OneLeaf.txt -TwoLeaf.txt 3、组合模式描述...组合模式属于对象的结构模式,有时又叫做“部分——整体”模式。...组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。...二、组合模式-安全式 1、基础概念 安全式的组合模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。...-透明式 1、概念图解 与安全式的组合模式不同的是,透明式的组合模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定接口。
一、生活场景 每年双十一,各大电商平台会推出不同的满减策略,当用户的消费金额满一定额度后,会进行减去一定的优惠额度,从而来一波清仓甩卖,使用策略模式来描述该流程。...500){ totalPrice = totalPrice-120.0 ; } return totalPrice ; } } 二、策略模式...1、基础概念 策略模式属于对象的行为模式。...策略模式中定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客 户端。 2、模式图解 ? 3、核心角色 环境角色 持有一个Strategy策略接口角色的引用。...策略模式的关键是:变化的与不变分离,体现了“对修改关闭,对扩展开放”原则。
一、生活场景 1、场景描述 智能电脑的品牌越来越多,由此诞生了一款电脑控制的APP,万能遥控器,用户在使用遥控器的时候,可以切换为自家电视的品牌,然后对电视进行控制。...1、基础概念 命令模式属于对象的行为模式。...命令模式把一个请求或者操作封装到一个对象中。把发出命令的动作和执行命令的动作分割开,委派给不同的对象。...命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行。 2、模式图解 ?...松散的耦合 命令模式使得命令发起者和命令执行者解耦,发起命令的对象完全不知道具体实现对象是谁。
一、生活场景 1、场景描述 在电商高速发展的今天,快递的数量十分庞大,甚至出现了快递代理行业,简单的说就是快递的主人没有时间收快递,会指定一个快递的代收点,比如快递柜,快递驿站等,然后等有时间的时候再过去取...,下面使用代码对这个场景进行简单的描述。...Override public void signName(String name) { this.expressAct.signName(name); } } 二、代理模式...1、概念描述 代理模式是对象的结构模式。...代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。所谓代理,就是一个对象代表另一个对象执行相应的动作程序。而代理对象可以在客户端和目标对象之间起到中介的作用。 2、模式图解 ?
「设计模式 JavaScript 描述」模板方法模式 在 JavaScript 开发中用到继承的场景其实并不是很多,但这不代表继承在 JavaScript 里没有用武之地,虽然没有真正的类和继承机制,但我们可以通过原型...模板方法模式的定义和组成 模板方法模式是一种只需使用继承就可以实现的非常简单的模式。 模板方法模式由两部分结构组成,第一部分是「抽象父类」,第二部分是具体的「实现子类」。...在这个例子里,我们把挂钩的名字定为 customerWantsCondiments,接下来将挂钩放入 Beverage 类,看看我们如何得到一杯不需要糖和牛奶的咖啡,代码如下: const Beverage...除此之外,好莱坞原则还常常应用于其他模式和场景,例如发布—订阅模式和回调函数。 发布—订阅模式 在发布—订阅模式中,发布者会把消息推送给订阅者,这取代了原先不断去 fetch 消息的形式。...小结 模板方法模式是一种典型的通过封装变化提高系统扩展性的设计模式。
一、生活场景 1、场景描述 孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领。他变成鱼儿时,就可以到水里游泳;他变成鸟儿时,就可以在天上飞行。...= new Bird(fish); bird.shapeDesc(); } } // 顶级接口 interface TheGreatestSage { // 定义一个描述形态的方法...Override public void shapeDesc() { System.out.println("Monkey.move()"); } } // 包装一层变化的描述...三、实际应用 1、JDK中IO流 1)、基本描述 装饰模式在Java语言中的最经典的应用就是Java I/O类库的设计。...很少单一的创建流对象,通过创建多个叠合对象来提供所期望的IO流功能,因此装饰模式是Java I/O类库的基本模式。 2)、IO流图解描述 抽象构件角色 由InputStream扮演。
一、生活场景 1、场景描述 变色龙是爬行动物,是非常奇特的动物,它有适于树栖生活的种种特征和行为,身体也会随着环境的变化而变化出适应环境的颜色,非常神奇。下面基于状态模式对该变化过程进行描述。...1、基础概念 状态模式是对象的行为模式,状态模式允许一个对象在其内部状态改变的时候改变其行为。...状态模式把对象的行为封装在不同状态的对象中,每一个状态对象都是抽象状态类的子类。意图是让一个对象在其内部状态改变的时候,其行为也随之改变。 2、模式图解 ?...将容易产生问题的if-else语句拆分,状态模式将每个状态的行为封装到对应的一个类中,代码有很强的可读性。...应用场景:当一个事件或者对象有很多种状态,状态之间会相互转换,不同的状态有不同的行为,可以考虑使用状态模式。
一、解释器模式 1、基础概念 解释器模式是对象的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的表达式。...2、模式图解 ? 3、核心角色 (1)、抽象表达式 Express:声明具体表达式角色需要实现的抽象接口,该接口主要提供一个interpret()方法,称做解释操作。...this.parseTemplate(expressionString, context) : this.doParseExpression(expressionString, context); } 三、模式总结...优点 当有一个表达式或者语言需要解释执行,该场景下的内容可以考虑使用解释器模式,使程序具有良好的扩展性。 缺点 解释器模式会引起类膨胀,会导致程序执行和调试非常复杂,不容易理解。
一、生活场景 基于建造者模式,描述软件开发的流程。...1、代码实现 /** * 基于建造者模式描述软件开发 */ public class C01_InScene { public static void main(String[] args)...二、建造者模式 1、基础概念 建造模式是对象的创建模式。建造模式可以将一个产品的内部属性描述与产品的生产过程分割,从而可以使一个建造过程生成具有不同的内部表象的产品对象。...模式中直接创建产品对象的是具体建造者角色。 2)、具体建造者(ConcreteBuilder)角色 完成的任务包括:1.实现抽象建造者Builder所声明的接口,给出完成创建产品实例的操作。...3、模式图解 ?
一、原型模式简介 1、基础概念 原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。...2、模式结构 原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例。...,指定[scope="prototype"]就是原型模式。...2、深拷贝 1)、概念描述 除了浅拷贝要拷贝的值外,还负责拷贝引用类型的数据。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象,这种对被引用到的对象的复制叫做间接复制。...2、缺点总结 原型模式最主要的缺点是每一个类都必须配备一个克隆方法。
一、生活场景 1、场景描述 在公司的日常安排中,通常划分多个部门,每个部门又会分为不同的小组,部门经理的一项核心工作就是协调部门小组之间的工作,例如开发小组,产品小组,小组的需求统一汇总到经理,经理统一安排和协调...1、基本概念 调停者模式是对象的行为模式。...调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互显式引用,通过一个中介对象进行引用通知,从而对象之间解耦。...松散耦合 调停者模式通过把多个同事对象之间的交互封装到调停者对象里面,从而使得同事对象之间松散耦合。...模式的缺点 调停者模式的一个潜在缺点是,过度集中化,当同事对象很多,交互非常、复杂时,会导致调停者对象变得十分复杂,而且难于管理和维护。
一、桥接模式简介 1、基础描述 桥接模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。...桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。...2、场景问题描述 1)、场景分析 在一个复杂的系统中,消息通知是一个必备模块,一般封装方式主要从下面两个方式入手: 消息类型 用户端消息(user-client) 管理端消息(system-client...3)、源码实现 /** * 桥接模式场景应用 */ public class C01_InScene { public static void main(String[] args) {...1、模式图解 ?
现在基于模板方法模式进行该过程描述。...1、基础概念 模板方法模式是类的行为模式。...简单说,模板方法模式定义流程中的核心的框架,而将实际的业务操作延迟到子类中,使得子类可以不改变流程的结构,但可以重定义业务程序。 2、模式图解 ?...() { } /** * 重写父类的方法 */ @Override public void hookMethod(){ } } 5、不同方法描述...在API的封装是典型的模板方法模式。
一、抽象工厂模式 1、生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂。...2、抽象工厂模式 1) 抽象工厂模式:定义了一个interface用于创建相关对象或相互依赖的对象,而无需指明具体的类; 2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合; 3) 从设计层面看...,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。...origin() { System.out.println(super.date+":"+super.name+"在德国慕尼黑生产"); } } 二、Spring框架应用 1、场景描述...三、工厂模式小结 三种工厂模式 (简单工厂模式、工厂方法模式、抽象工厂模式),工厂模式的核心用意将实例化对象的代码封装起来,放到工厂类中统一管理和维护,完成代码依赖关系的解耦。
领取专属 10元无门槛券
手把手带您无忧上云