Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1441426
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-02-23 10:46:13

原文链接   http://www.cnblogs.com/zuoxiaolong/p/pattern26.html                                   

单例模式     

  • 设计原则:无
  • 常用场景:应用中有对象需要是全局的且唯一
  • 使用概率:99.99999%
  • 复杂度:低
  • 变化点:无
  • 选择关键点:一个对象在应用中出现多个实例是否会引起逻辑上或者是程序上的错误
  • 逆鳞:在以为是单例的情况下,却产生了多个实例
  • 相关设计模式
    • 原型模式:单例模式是只有一个实例,原型模式每拷贝一次都会创造一个新的实例。

简单工厂模式

  • 设计原则:遵循单一职责、违背开闭原则
  • 常用场景:需要在一堆产品中选择其中一个产品
  • 使用概率:99.99999%
  • 复杂度:低
  • 变化点:产品的种类
  • 选择关键点:一种产品是否可根据某个参数决定它的种类
  • 逆鳞:工厂类不能正常工作
  • 相关设计模式
    • 工厂方法模式:工厂方法模式是简单工厂模式的进一步抽象化,在这两者之间做选择,主要看将工厂进一步抽象化是否有必要,通常情况下,如果工厂的作用仅仅是用来制造产品,则没必要使用工厂方法模式。

工厂方法模式

  • 设计原则:遵循单一职责、依赖倒置、开闭原则
  • 常用场景:一种场景是希望工厂与产品的种类对客户端保持透明,给客户端提供一致的操作,另外一种是不同的工厂和产品可以提供客户端不同的服务或功能
  • 使用概率:60%
  • 复杂度:中低
  • 变化点:工厂与产品的种类
  • 选择关键点:工厂类和产品类是否是同生同灭的关系
  • 逆鳞:无
  • 相关设计模式
    • 抽象工厂模式:工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。

抽象工厂模式

  • 设计原则:遵循单一职责、依赖倒置、开闭原则
  • 常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类
  • 使用概率:30%
  • 复杂度:中
  • 变化点:工厂与产品的种类
  • 选择关键点:产品族是否需要一起提供,且是否有一致的接口
  • 逆鳞:无
  • 相关设计模式
    • 建造者模式:两者都是建造一批对象或者说产品,不同的是两者的目的和实现手段,在建造者模式中,是为了复用对象的构建过程而定义了一个指挥者,而在抽象工厂模式中,是为了提供一个这批对象的创建接口而定义了抽象工厂接口。

建造者模式

  • 设计原则:遵循单一职责、开闭原则
  • 常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂
  • 使用概率:10%
  • 复杂度:中
  • 变化点:产品的表示
  • 选择关键点:各个产品的构建过程是否相同
  • 逆鳞:指挥者不能正常工作

原型模式

  • 设计原则:无
  • 常用场景:需要在运行时动态的创建指定实例种类的对象,或是需要复用其状态
  • 使用概率:10%
  • 复杂度:中低
  • 变化点:无
  • 选择关键点:创建出来的对象是否可以立即投入使用
  • 逆鳞:在以为是深度拷贝的情况下,却未实现深度拷贝
注:
开放-封闭原则(Open Close Principle
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

 开放封闭原则主要体现在两个方面:

         对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

         对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

         “需求总是变化”、“世界上没有一个软件是不变的”,这些言论是对软件需求最经典的表白。从中透射出一个关键的意思就是,对于软件设计者来说,必须在不需要对原有的系统进行修改的情况下,实现灵活的系统扩展。而如何能做到这一点呢?

         只有依赖于抽象。实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。这是实施开放封闭原则的基本思路,同时这种机制是建立在两个基本的设计原则的基础上,这就是Liskov替换原则和合成/聚合复用原则。

http://www.cnblogs.com/adam/archive/2008/04/18/1159280.html 
阅读(813) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~