23种设计模式

  众所周知软件设计模式是为了解决软甲设计可维护性较低的问题,而这些问题通常由于代码过于僵硬、脆弱、复用率低、黏度过高造成。而根据实际情况使用23种设计模式就可以很好的解决这些问题。

23个模式分为三类,创建型模式、结构型模式、行为型模式。其中,创建型模式包括工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式;结构型模式包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式;行为型模式包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。下面我来简单总结一下23种设计模式。

  1. 简单工厂模式:用户无需了解产品的制造过程,只需要知道名字就能得到产品。,先定义一个抽象的产品工厂类,再定义具体的工厂类来生成不同的产品,比如不同品牌的电视机等,它们实现在抽象按钮工厂类中定义的方法。
  2. 工厂方法模式:工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成具体的产品创建对象。和简单工厂模式的区别是,不再涉及一个产品工厂来统一负责所有产品的创建,而是将具体电视的创建过程交给专门的工厂子类来完成。
  3. 抽象工厂模式:工厂方法模式的泛化版。引入了产品等级结构(继承结构,比如抽象类是电视机,其子类是不同品牌的电视机)和产品族(指的是由同一工厂生产的不同的产品等级结构)。提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
  4. 建造者模式:用于创建一个包含多个组成部分的复杂对象,返回一个完整的产品对象给用户。比如飞机会包括引擎、仪表盘、机翼、起落装置等,对于大部分用户而言,他们要使用的是一架完整的飞机,无需关心他们的组成部分。就可以使用建造者模式。
  5. 原型模式:在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。
  6. 单例模式:一个类只有一个实例,而且自行实例化并且向系统提供这个实例。
  7. 适配器模式:适配器模式将一个接口转换成客户需要使用的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。换句话说,就是当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法。
  8. 桥接模式:有两个变化维度(即两个变化的原因)的系统,采用根据实际对两个变化维度进行组合来进行设计系统中类的个数更少,且系统扩展更为方便。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。
  9. 组合模式:组合多个对象形成树形结构来表示,对单个对象和组合对象的使用具有一致性。例如文件夹中可以包括文件夹和文件。
  10. 装饰模式:通过关联机制来给对象增加一些额外的功能。装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。
  11. 外观模式:外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道。外观模式定义了一个高层接口使得子系统更加容易使用。
  12. 享元模式:系统只使用少量的很相似、状态变化很小,可以实现对象多次复用的对象。运用共享技术有效地支持大量细粒度对象的复用。
  13. 代理模式:给某一个对象提供一个代理,并且由代理对象控制对原对象的引用。比如当网页的大图片加载的比较慢不能立即显示是可你,可以用一些小图片传到客户端,此时这些小图片就是这些图片的代理。
  14. 职责链模式:很多时候处理请求的对象不止一个,比如假条的审批要通过辅导员、系主任等,沿着一条单向的链来传递请求,直到有对象来处理它为止。
  15. 命令模式:命令模式是携带行为信息的信使。命令模式对于构建 GUI 应用有特别重要的意义,比如菜单的响应,使用 MFC 时我们通过一系列的 on_command 宏来关联菜单操作,而如果采用命令模式和工厂模式,将可以得到更精巧的实现。
  16. 解释器模式:实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
  17. 迭代器模式:如果将电视机看成一个视频频道的集合,那么迭代器就相当于是电视机遥控器。我们可以通过遥控器对电视频道进行操作。迭代器模式提供了一种方法来访问聚合对象,但是不用暴露对象的内部表示。
  18. 中介者模式:行为型模式。顾名思义,就是通过一个中介者中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,可以独立地改变它们之间的交互。
  19. 备忘录模式:就像是可以撤销历史操作一样的功能,备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。
  20. 观察者模式:将发生改变的对象成为观察目标,而被通知的对象称为观察者。观察者模式定义了一种对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关的依赖对象可以得到通知并被自动更新。

21.状态模式:当对象的状态改变时,同时改变其行为,比如qq有几种状态,如在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态

22. 模板方法模式:一个抽象类中,一个主方法,n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

23. 访问者模式:封装一些施加于某种数据结构元素之上的操作,一旦操作被修改,可以保持结构不变,使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

 

posted @ 2017-04-03 22:26  卿语  阅读(202)  评论(0编辑  收藏  举报