Head First设计模式阅读笔记(三)

状态模式:
概念:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

定义一个状态的父类,限定了可以执行的操作,并实例化用于存储现在状态。子类通过继承关系,实现不同状态下,进行各种操作的逻辑。这样可以保证对修改封闭,对添加开放。 当加入一个新的状态的时候,只需要继承父类并实现相应操作,并修改主线程逻辑即可。

同策略模式大同小异,但是实现的意图不一样。 策略模式是为了类的多样化,操作的多样化;状态模式是为了状态转换的易于实现和添加。

状态模式

 

代理模式:
概念:为另一个对象提供一个替身或占位符以访问这个对象

现在看来,应该就是类似于webservice或者是云服务吧。为客户提供一个接口,告诉他可以实现的功能,然后客户就可以使用这个接口完成想要进行的操作。实际上,这个接口只是调用了一个远程的服务,将数据传递过去并将结果传递回来。

现在的很多像soap和hessian都可以很好的完成,另外还有python和ruby等脚本语言应该也比较方便的实现。

代理模式

 

复合模式:

概念:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。

问题的引出:

一大堆Quackable —– 策略模式,继承

有一只鹅出现了,它希望自己像一个Quackable —– 适配器模式

然后,呱呱叫学家决定要计算呱呱叫声的次数 —– 工厂模式生成

但是呱呱叫学家担心他们忘了加上QuackCounter装饰者 —– 装饰者模式

又是鸭子,又是鹅,又是Quackable的……我们有管理上的困扰 —– 组合模式和迭代器模式

当任何呱呱声响起时,呱呱叫学家都希望能被告知 —– 观察者模式

实际上,就MVC框架就是很好的一个复合模式

 

其他的一些模式

桥接模式:不只改变你的实现,也改变你的抽象。

生成器模式:封装一个产品的构造过程,并允许步骤构造。

责任链模式:让一个以上的对象有机会能够处理某个请求。(处理流程)

蝇量模式:让某个类的一个实例能用来提供许多“虚拟实例”。(类似不同大小不同内容的注释文字)

解释器模式:为语言创建解释器。(编译原理的词法分析,语法分析)

中介者模式:集中相关对象之间复杂的沟通和控制方式。(卖房中介,可以应对不同房源,不同买房主,卖房主,有自己的营销策略)

备忘录模式:可以让对象返回之前的状态。(动态规划里面的备忘录方法)

原型模式:创建给定类的实例的过程很昂贵或很复杂时使用。

访问者模式:可以为一个对象的组合增加新的能力,且封装并不重要时使用。