设计模式总结2

来源:互联网 发布:cs1.5弹道优化参数 编辑:程序博客网 时间:2024/05/22 03:45

1 基本原则


在运用面向对象的思想进行软件设计时,需要遵循的原则一般有6个:
  • 单一职责原则(Single Responsibility Principle)
  • 里氏替换原则(Liskov Substitution Principle)
  • 依赖倒置原则(Dependence Inversion Principle)
  • 接口隔离原则(Interface Segregation Principle)
  • 迪米特法则(Law Of Demeter)
  • 开闭原则(Open Close Principle)

2 创建类模式总结


创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户端可以直接得到对象,而不用去关心如何创建对象。

2.1 分类

创建类模式有5种,分别是:
  • 单例模式:用于得到内存中的唯一对象。
  • 工厂方法模式:用于创建复杂对象。
  • 抽象工厂模式:用于创建一组相关或相互依赖的复杂对象。
  • 建造者模式:用于创建模块化的更加复杂的对象。
  • 原型模式:用于得到一个对象的拷贝。

为什么需要创建性模式

  • 首先,在编程中,对象的创建通常是一件比较复杂的事,因为,为了达到降低耦合的目的,我们通常采用面向抽象编程的方式,对象间的关系不会硬编码到类中,而是等到调用的时候再进行组装,这样虽然降低了对象间的耦合,提高了对象复用的可能,但在一定程度上将组装类的任务都交给了最终调用的客户端程序,大大增加了客户端程序的复杂度。采用创建类模式的优点之一就是将组装对象的过程封装到一个单独的类中,这样,既不会增加对象间的耦合,又可以最大限度的减小客户端的负担。
  • 其次,使用普通的方式创建对象,一般都是返回一个具体的对象,即所谓的面向实现编程,这与设计模式原则是相违背的。采用创建类模式则可以实现面向抽象编程。客户端要求的只是一个抽象的类型,具体返回什么样的对象,由创建者来决定。
  • 再次,可以对创建对象的过程进行优化,客户端关注的只是得到对象,对对象的创建过程则不关心,因此,创建者可以对创建的过程进行优化,例如在特定条件下,如果使用单例模式或者是使用原型模式,都可以优化系统的性能。

总结


所有的创建类模式本质上都是对对象的创建过程进行封装。

3 结构型模式总结

  • 适配器模式:为类提供一个公共接口;
  • 装饰器模式:动态的给一个对象添加一些额外的职责;(如QQ上任务更换衣服的类)
  • 代理模式:为其他对象提供一种代理以控制对这个对象的访问。(如帮同学带饭)
  • 外观模式:为子系统中的一组接口提供一个一致的界面,使得高层接口更加实用。
  • 桥接模式:将抽象部分和它的实现分离,使它们都可以独立地变化。(如电脑上的软件开发和硬件开发是相互独立开发的)
  • 组合模式:部分-整体的层次结构;(如总公司-分公司的结构层次,树形)
  • 享元模式:运用共享技术有效的支持大量细粒度的对象。(如网站代码的复用开发,内容相同的只实例化一个)。

4 行为型模式总结


  • 策略模式:定义了算法家族,不同场合使用不同的算法;(如超市经常在不同的时间玩不同的打折方式)
  • 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。(如老师出试卷同学做答的情况,实质是充分利用了动态绑定)
  • 观察者模式:定义了一种一对多的依赖关系,让多个观察者多想同时监听某一个主题对象。(如:偷地瓜的时候,让你的小伙伴观察敌情,并随时通知你们)
  • 迭代子模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。(如:vector中的iterator)
  • 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它位置。(如请求公司加薪的时候,先汇报经理,经理无权做主,再汇报监理,也无权,左后向总经理汇报)
  • 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。(如服务员、客人、厨师之间的关系,服务员将客人的订单一股脑的通知厨师,并且可以撤销、修改订单)
  • 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。(如保存、读取游戏进度)
  • 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。(如一个方法中逻辑判断太多,if-else)
  • 访问者模式
  • 中介者模式:用一个中介对象来封装一些列的对象交互。中介者使各对象不需要显示地相互吸引,从而使其偶尔松散,而且可以独立地改变他们之间的交互。(如各国之间不需要直接联系,而是通过联合国进行联系)
  • 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。(如一个机器狗,当你说跑的时候,机器狗就跑了起来)

5 并发型模式和线程池模式

0 0
原创粉丝点击