设计模式总结

设计模式总结

现在关于24种设计模式都介绍完了,其中包括GOF提出的23种设计模式和简单工厂模式。每种模式都有一个案例,可能不是每个案例都是这么的贴切、真实,同时每个模式最后都尽量举出了框架中涉及到的代码进行解析,这对于理解每种设计模式还是很有帮助的,下面对这24种模式进行简单的总结。

创建型模式

模式名称 总结
简单工厂模式 简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开
工厂方法模式 工厂方法模式是简单工厂模式的延伸,工厂方法模式定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中
抽象工厂模式 抽象工厂模式是工厂方法模式的进一步延伸,是工厂方法的升级,为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类
单例模式 单例模式是一种目标明确、结构简单、理解容易的设计模式,一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
原型模式 原型管理器(Prototype Manager)是将多个原型对象存储在一个集合中供客户端使用,它是一个专门负责克隆对象的工厂,其中定义了一个集合用于存储原型对象,如果需要某个原型对象的一个克隆,可以通过复制集合中对应的原型对象来获得
建造者模式 建造者模式的核心在于如何一步步构建一个包含多个组成部件的完整对象,使用相同的构建过程构建不同的产品

以上都属于创建型模式,因此这些模式都针对对象的创建和管理等方面来设计的。其中,单例模式和原型模式非常容易理解,单例模式是在内存中保持只有一个对象,原型模式是通过复制的方式产生一个新的对象。而工厂方法模式、抽象工厂模式和建造者模式具有较多的相似性,它们之间的区别如下:

  • 工厂方法模式注重的是整体对象的创建方法。
  • 建造者模式注重的是部件构建的过程,旨在通过一步步精确构造,创建出一个复杂的对象。
  • 抽象工厂模式实现对产品家族的创建,抽象工厂模式不关心构建过程,只关心什么产品由什么工厂生产即可。

结构型模式

模式名称 总结
适配器模式 适配器模式将现有接口转化为客户类所期望的接口,实现了对现有类的复用
桥接模式 桥接模式为多维度变化的系统提供了一套完整的解决方案,将抽象和实现解耦,使得两者可以独立的变化,并且降低了系统的复杂度
组合模式 组合模式使用面向对象的思想来实现树形结构的构建与处理,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
装饰模式 装饰模式降低了系统的耦合度,可以动态增加或删除对象的职责,并使得需要装饰的具体构件类和具体装饰类可以独立变化,以便增加新的具体构件类和具体装饰类
外观模式 外观模式通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,使子系统与客户端的耦合度降低,且客户端调用非常方便
享元模式 当系统中存在大量相同或者相似的对象时,享元模式是一种较好的解决方案,它通过共享技术实现相同或相似的细粒度对象的复用,从而节约了内存空间,提高了系统性能
代理模式 代理模式是常用的结构型设计模式之一,它为对象的间接访问提供了一个解决方案,可以对对象的访问进行控制

上面的结构型模式都是通过组合类或对象产生更复杂的结构以适应更高层次的逻辑需求。其中代理模式、装饰模式和适配器模式比较相似,这三个模式有一个共同点,它们都能够对类进行“包装”,但它们之间的主要区别如下:

  • 装饰模式是代理模式的一个特殊应用,虽然它们都具有相同的接口,但装饰模式是对类的功能进行加强或减弱,重点是类的功能变化;而代理模式着重代理过程的控制。
  • 装饰模式和适配器模式都能对类进行“包装”,但装饰模式包装的是同一家族(相同接口或父类)的对象,而适配器模式可以修饰不同接口的对象,主要是将非本家族的对象伪装成同一家族对象。

行为型模式

模式名称 总结
职责链模式 职责链模式通过建立一条链来组织请求的处理者,请求将沿着链进行传递,请求发送者无须知道请求在何时、何处以及如何被处理,实现了请求发送者与处理者的解耦
命令模式 命令模式可以将请求发送者与接收者解耦,请求发送者通过命令对象来间接引用请求接收者
解释器模式 解释器模式为自定义语言的设计和实现提供了一种解决方案,它用于定义一组文法规则并通过这组文法规则来解释语言中的句子
迭代器模式 迭代器模式通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器来完成
中介者模式 中介者模式将一个网状的系统结构变成一个以中介者对象为中心的星形结构,在这个星型结构中,使用中介者对象与其他对象的一对多关系来取代原有对象之间的多对多关系
备忘录模式 备忘录是一个很特殊的对象,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态
观察者模式 观察者模式定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新
状态模式 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用
策略模式 策略模式定义一组算法,将每个算法都封装起来,并且使它们之间可以互换
模板方法模式 模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
访问者模式 当系统中存在一个较为复杂的对象结构,且不同访问者对其所采取的操作也不相同时,可以考虑使用访问者模式进行设计。

行为型模式的个数最多高达11个,其中命令模式和策略模式的类图很相似,命令模式比策略模式多了一个接收者角色,它们之间的区别如下:

  • 策略模式是封装算法,认为算法是一个完整的、不可拆分的原子业务,其目的是让这些算法独立,并且可以相互替换,让行为的变化独立于拥有行为的客户。
  • 命令模式则是对动作的解耦,把一个动作的执行分为执行对象(接受者角色)、执行行为(命令角色),让两者相互独立而互不影响。

结语

至此,设计模式的学习可以说告一段落了。但是学会如何在代码中灵活运用这些模式还有很长的路要走,不代表到此就停止了,学以致用才是最终的目的,希望自己在以后的编程生涯中对此铭记于心,共勉。

posted @ 2021-01-19 19:35  Phoegel  阅读(57)  评论(0编辑  收藏  举报