设计模式的二十三招式

设计模式总结


1. 创造型 5

工厂模式

一种工厂生产一种产品。

抽象工厂模式

同一类别的产品,相同的一些属性提取到抽象工厂中,具体产品的工厂遵守抽象工厂协议(具备一些共性),那么就可以使用具体产品工厂创造个性化的产品。

建造者模式:将一个复杂对象的构建与表示分离,使得构建过程可以创建不同的表示。

指挥者(director)持有一个 builder 引用,客户端调用指挥者的“切换 builder”方法后,调用指挥者的 make 方法来建造产品。不同的具体 builder 类最终可以 getResult 得到不同的产品。

客户端调用的过程为:为指挥者设定 builer, 通过指挥者调用 builder 的各个方法, getResult 获得产品。

适用于:构造函数有多参数,可以使用建造者模式灵活地创建对象。

建造者模式和工厂模式的区别是什么?建造者模式是为了灵活创建有不同构成的对象,而工厂模式是什么样的工厂只生产什么样的产品。

建造者模式和装饰器模式的区别是什么?

建造者模式和策略模式的区别是什么?

建造者模式和状态模式的区别是什么?

单例模式

在当前程序中,当前类只生成一个对象,这个对象称为单例。(单例对象生成线程不安全,在多线程环境中需要加锁)

原型模式

设定一个 ”原型“ 协议具有 clone 方法,原始父类实现了 “原型”协议,clone 方法(传入原始父类引用,返回一个原始父类对象对象),这样可以保证深复制且子类不与父类耦合(只是依赖 “原型” 协议)。

2. 结构型 8

适配器模式

为了让 A 兼容 B,适配器继承 B,并且持有 A 的引用。这样适配器就可当作 B 来调用,也可以发挥 A 的功能。外部代码调用 B 执行功能,通过适配器转换为对 A 的调用。

桥接模式

将一个类拆分为“抽象” A 和“实现” B 两部分。A中持有 B 的引用,负责调用B来实现一些功能,B 负责把功能实现好。实际注入给 A 的 B 引用可以是B的实现类,也可以是B的实现类的子类的具体类。

桥接模式与委托模式的区别是什么?

桥接模式与策略模式的区别是什么?

组合模式

“容器”类和“叶子”类都实现“组件”接口,容器中可以存放多个组件(可以是容器或者叶子),组件包含组件,最后可以组合成多层的结构。

装饰器模式

装饰器和细分的组类都遵守“组件”协议,使用装饰器按不同顺序装饰细分组件可以得到不同的产品。

表面模式

基于现有工具库,编写一个便于调用的功能块给更高层的功能使用,使得高层的功能只在表面进行调用。

享元模式

将主类中静态、占内存大、重复性强的属性,作为一个独立享元;需要真正使用时,一个主类对象使用一个引用来拿取那个占内存大的属性。比如一张位图。

代理模式

代理和被代理者都遵守同一个协议,被代理者的关于协议的所有方法都会被代理。代理持有被代理者的引用。

委托模式

主对象将一部分方法交给委托实现,委托持有主对象的引用。

3. 行为型 10

责任链模式

处理事务的结点组成一条链,从链头开始,当前结点对到来的事务进行处理,若处理不了,则丢给下一个结点。

命令模式

将事务分割为信号发送者和接收者,使用一个“命令”对象来沟通这两者。让发送与接收彼此隔离。

迭代器模式

主对象可以生成一个迭代器用于遍历主对象中的列表结构。

中介者模式

对于一些组件,设定一个中介者,组件对象向中介者注册(交出自己的引用),中介者帮助不同类型对象之间的沟通。

中介者模式集中管理各组件的消息传递,避免组件之间相互耦合。

命令模式是一个方向的消息传递(有控制的意味),中介模式可以多个对象之间双向地传递消息。

备忘录模式

设定一个备忘对象和一个备忘录对象(具有一个历史记录数组),存入时,主对象生成备忘对象,将备忘对象存入备忘录;撤销时,从备忘录取出最近的一个备忘对象,恢复为主对象。其中备忘对象应持有主对象的引用,便于恢复。

观察者模式

也称为订阅者模式。设定一个发布者和多个订阅者,订阅者若有向发布者注册,则会被加入发布者的通知列表,发布者在有新的变化的时候,依据通知列表来通知每个订阅者。

状态模式

设定一些状态对象(同遵守 “状态” 协议),主对象持有一个 “状态” 引用,主对象同一时刻只能有一种状态,使用多个状态对象来切换主对象的状态。“状态”协议持有主对象引用,便于状态对象代替主对象执行一些具体操作。

策略模式

设定一个策略协议,可以使用多种实现,在持有策略协议引用的地方,切换策略对象即可切换为另一种解决问题的方式。

状态模式和策略模式都是使用切换对象引用的方式来实现功能,状态模式重点在于主对象的状态变化并引起主对象行为变化,而策略模式重点在于切换解决某项问题的策略以达到某些性能要求。

模板方法模式

父类定义了模板方法与默认的细分步骤,子类可依据个性要求重写细分步骤,但不能修改模板方法。模板方法保证了业务流程在子类中的一致性。

访问者模式

设定访问者,在得到主对象的接受的情况下(主对象传递自己的引用),查看主对象的属性,且不能影响到主对象的属性。


以上就是基本的设计模式的简要说明,这就像《降龙十八掌》,每个招式都蕴含一些思考。现在,我们大致知道了有这些模式。这只是一个新的开始,若要真正懂它,还需要在写代码、看框架的时候多加思考,才可以融会贯通。

至于其中有提出的问题,就当作挖坑,下一次有机会,我们一一解决。

读者朋友若有类似的问题,评论区聊~ 🙋🏼🙋🏻‍♀️📡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值