设计模式学习笔记(未完)

第一次系统学习设计模式的时候,我还在学校里。买的书是《设计模式–可复用面向对象软件的基础》翻译过来的,机械工业出版社,2005年12月第1版。当时的感觉就是醍醐灌顶,这些老外太牛了。

自己在代码中使用的模式真不多,在各种库中看到不少,具有设计模式思想的东西不少。

最近有时间,把这本书又过了一遍,新的体会:文章组织和翻译不太好啊(有的字句不太好理解啊,每个模式的应用实例我基本不知道啊,也许是原文就这样(没看过英文原版));学习模式要掌握其精髓,类的组织也不完全是死的,要灵活掌握,也可以灵活变化;新的感觉是它们也不是万能的,也有局限和不足。

每一个设计模式,描述了一个不断重复发生的问题,及其解决方案的核心。这样,针对这类问题,就可以重用这个解决方案。

对象是对现实世界的抽象,可以是物,可以是一个操作,可以是一种关系,也可以是一个状态,等等;抽象的粒度可以很大,也可以很小。

对象的类型只与它的接口有关。接口指类或对象能响应的请求的集合。对象与外界唯一的交互方式就是它的接口;读取和改变对象的状态的唯一方式也是调用他的接口。

相同接口的对象可以有不同的实现(接口和实现分离),所以才会有动态绑定(调用接口的请求编译时就确定的,但它的实现(或者叫包含实现的对象)是运行时确定的,所以叫动态绑定),进而才有多态(动态绑定不同的对象,从而调用他们不同的实现)。

继承分为实现继承和接口继承,C++中公有继承纯抽象类或者公有继承父类中的纯虚函数,就叫接口继承;实现继承包括了继承父类的protected方法等。C++中通常同时用到实现继承和接口继承。

代码复用机制:继承(缺省实现,实现继承),对象组合,参数化类型即模板。

我理解设计模式的最大一个思想是封装变化,需要考虑现实问题中哪些是可变的,设计中应该支持哪些变化。下面从每个模式封装变化和实际应用实例这两个方面总结一下:

创建型模式:与对象的创建有关,隐藏了被用来创建的具体的类的信息,隐藏了如何创建的信息。这些创建类模式就能灵活地支持什么被创建,创建,怎样创建,何时创建等。

  1. Abstract Factory(抽象工厂):
    可变部分:创建不同的产品系列(每个系列包括多个不同的产品)
  2. Builder(生成器):
    可变部分:用不同的方式方法创建组合对象?
  3. Factory Method(工厂方法):
    可变部分:创建不同的子类对象?
  4. Prototype(原型):
    可变部分:创建不同的类对象
  5. Singleton(单体):
    可变部分:不允许给一个类创建多个实例,只创建一个实例
    结构型模式:类或对象的组合

  6. Adapter(适配器):
    可变部分:对象接口,把不同的对象接口适配成一个需要的接口

  7. Bridge(桥接):
    可变部分:对象的实现,支持对象的实现发生变化
  8. Composite(组成?):
    可变部分:对象的结构和组成??支持对象的组成发生变化
  9. Decorator(修饰):
    可变部分:对象的职责,支持对象职责发生变化
  10. Facade(外观):
    可变部分:一个子系统的接口,与Adapter区别??
  11. Flyweight(享元):
    可变部分:对象的存储开销??
  12. Proxy(代理):
    可变部分:如何访问一个对象,对象的位置
    行为型模式:类或对象之间的交互

  13. Chain of Responsibility(职责链):
    可变部分:响应一个请求的对象

  14. Command(命令):
    可变部分:何时、怎样满足一个请求
  15. Interpreter(解释器):
    可变部分:一个语言的文法及解释
  16. Iterator(迭代器):
    可变部分:遍历访问一个容器中元素的方法
  17. Mediator(中介者):
    可变部分:对象间怎样交互、和谁交互
  18. Memento(备忘录):
    可变部分:一个对象中哪些私有信息存放在对象之外,以及什么时候进行存储
  19. Observer(观察者):
    可变部分:多个对象依赖于另外一个对象,它们如何通信保持一致状态
  20. State(状态):
    可变部分:对象的状态,(及状态对应的行为)
  21. Strategy(策略):
    可变部分:算法,跟Bridge的区别
  22. Template Method(模板方法):
    可变部分:算法中的某些步骤
  23. Visitor(访问者):
    可变部分:作用于一个(组)对象的可读操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值