这里总结了 23 种设计模式的结构图及定义,样例代码在 Github:studeyang/design-pattern。
一、创立型模式
1.1 简略工厂模式
1.2 工厂办法模式
工厂办法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂办法使一个类的实例化提早到其子类。
1.3 形象工厂模式
形象工厂模式,提供一个创立一系列相干或相互依赖对象的接口,而无需指定它们具体的类。
1.4 原型模式
原型模式,用原型实例指定创建对象的品种,并且通过拷贝这些原型创立新的对象。
1.5 建造者模式
建造者模式,将一个简单对象的构建与它的示意拆散,使得同样的构建过程能够创立不同的示意。
1.6 单例模式
单例模式,保障一个类仅有一个实例,并提供一个拜访它的全局拜访点。
二、结构型模式
2.1 适配器模式
适配器模式,将一个类的接口转换成客户心愿的另外一个接口。Adapter 模式使得本来因为接口不兼容而不能一起工作的那些类能够一起工作。
2.2 桥接模式
桥接模式,将形象局部与它的实现局部拆散,使它们都能够独立地变动。
2.3 组合模式
组合模式,将对象组合成树形构造以示意“局部 - 整体”的层次结构。组合模式使得用户对单个对象和组合对象的应用具备一致性。
2.4 装璜模式
装璜模式,动静地给一个对象增加一些额定的职责,就减少性能来说,装璜模式比生成子类更为灵便。
2.5 外观模式
外观模式,为子系统中的一组接口提供一个统一的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易应用。
2.6 享元模式
享元模式,使用共享技术无效地反对大量细粒度的对象。
2.7 代理模式
代理模式,为其余对象提供一种代理以管制对这个对象的拜访。
三、行为模式
3.1 解释器模式
解释器模式,给定一个语言,定义它的文法的一种示意,并定义一个解释器,这个解释器应用该示意来解释语言中的句子。
3.2 模板办法模式
模板办法模式,定义一个操作中的算法的骨架,而将一些步骤提早到子类中。模板办法使得子类能够不扭转一个算法的构造即可重定义该算法的某些特定步骤。
3.3 策略模式
场景:商场促销。简略工厂模式尽管也能解决这个问题,但这个模式只是解决对象的创立问题,而且因为工厂自身包含了所有的免费形式,商场是可能经常性地更改打折额度和返利额度,每次保护或扩大免费形式都要改变这个工厂。所以它不是最好的方法。
面对算法的时常变动,应该有更好的方法。
策略模式:它定义了算法家族,别离封装起来,让它们之间能够相互替换,此模式让算法的变动,不会影响到应用算法的客户。
3.4 观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会告诉所有观察者对象,使它们可能自动更新本人。
3.5 状态模式
状态模式,当一个对象的外在状态扭转时容许扭转其行为,这个对象看起来像是扭转了其类。
3.6 备忘录模式
备忘录:在不毁坏封装性的前提下,捕捉一个对象的外部状态,并在该对象之外保留这个状态。这样当前就可将该对象复原到原先保留的状态。
3.7 迭代器模式
迭代器模式,提供一种办法程序拜访一个聚合对象中各个元素,而又不裸露该对象的外部示意。
3.8 命令模式
命令模式,将一个申请封装为一个对象,从而使你可用不同的申请对客户进行参数化:对申请排队或记录申请日志,以 及反对可撤销的操作。
3.9 责任链模式
责任链模式,使多个对象都有机会解决申请,从而防止申请的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该申请,直到有一个对象解决它为止。
3.10 中介者模式
中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不须要显式地互相援用,从而使其耦合涣散,而且能够独立地扭转它们之间的交互。
3.11 访问者模式(附)
访问者模式,示意一个作用于某对象构造中的各元素的操作。它使你能够在不扭转各元素的类的前提下定义作用于这些元素的新操作。
其余相干文档
- 程序设计 6 大准则
- UML 类图和类之间的关系