23种设计模式概览(更新中......#2019/07/08)
创建型模式
工厂模式
- 包括三种:简单工厂模式;工厂方法模式;抽象工厂模式
- 简单工厂模式:
- 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类工厂方法使一个类的实例化延迟到其子类
- 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
- AbstractProductA和AbstractProductB 是两个抽象产品;
- 而ProductA1、ProductA2 和ProductB1、ProductB2就是对两个抽象产品的具体分类的实现
- IFactory 是一个抽象工厂接口,他里面应该包含所有的产品创建的抽象方法;
- ConcreteFactory1 和ConcreteFactory2就是具体的工厂;
- #!通常是在运行时刻在创建一个 ConcreteFactory 类的实例,这个具体的工厂类创建具有特定实现的产品对象,也就是说,为创建不同的对象,客户端应使用不同的具体工厂
- 优点:
- 易于交换产品系列,由于具体工厂类在一个应用中只需要初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置
- 使具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离
单例模式
建造者模式(Builder)
:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配
原型模式(prototype)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
- 原型模式其实就是从一个对象再创建另外一个个定制的对象,而且不知道任何创建的细节
- 优点:
- 既隐藏了对象创建的细节,又提高了性能。一般在初始化的信息不发生变化的情况下,克隆是最好的办法,
- 不用重新初始化对象,而是动态的获得对象运行时的状态
结构性模式
适配器模式
- 若系统的数据和行为都正确,但接口不符时,我们应该考虑适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况
装饰模式
代理模式
为其他对象提供一种代理以控制对这个对象的访问
外观模式(Facade)
为子系统中的一组接口提供一个一致的界面此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
- 注意
- ,增加外观类Façade 可以提供一个简单的接口,减少他们之间的依赖
- 在设计初期阶段,应该要有意识的将不同的两个层分离,在曾与层之间建立外观类Facade,
桥接模式
组合模式
享元模式
行为型模式
策略模式
屏幕剪辑的捕获时间: 2019/6/27 13:15
- 优点:
- 简化了单元测试,每个算法都有自己的类可以通过自己的接口单独测试
- 策略模式的 strategy 类层次为Context 定义了一系列可供重用的算法或行为。继承有助于析取出这些算法中的公共功能
模版方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类不可以不改变一个算法的结构即可重定义该算法的某些特定步骤
- 特点:
- 当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,通过模板方法模式把这些行为搬移到单一的地方这样就帮助子类摆脱重复的不变的行为的纠缠
- 提供了一个很好的代码复用平台
- 模版方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势
观察者模式(Observer)
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主体对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己
迭代子模式
责任链模式
命令模式
备忘录模式(Memento)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
状态模式(State)
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
- 状态模式主要解决的是当控制了一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
- 当一个对象的行为取决于他的状态,并且他必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式
- 优点:
- 通过定义新的子类可以很容易地增加新的状态和转换;消除了庞大的条件分支语句
- 状态模式通过把各种状态转移逻辑分布到State 的子类之间,来减少相互间的依赖
- 优点:
访问者模式
中介者模式
解释器模式