策略模式+观察者模式+装饰者模式

来源:互联网 发布:马云会编程吗 编辑:程序博客网 时间:2024/06/05 15:14

策略模式:
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
eg:鸭子模型

要点:
1.知道OO基础,并不足以让你设计出良好的OO系统。
2.良好的OO设计必须具备可复用、可扩展、可维护三个特性。
3.模式可以让我们建造出具有良好OO设计质量的系统。
4.模式被认为是历经验证的OO设计经验。
5.模式不是代码,而是针对设计问题的通用解决方案,你可把它们引用到特定的应用中。
6.模式不是被发明,而是被发现。
7.大多数的模式和原则,都着眼于软件变化的主体。
8.大多数的模式都允许系统局部改变独立于其它部分。
9.我们常把系统中会变化的部分抽出来封装。
10.模式让开发人员之间有共享的语言,能吼最大化沟通的价值。

观察者模式:
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
eg:订阅报纸;天气预报和公告板

要点:
1.观察者模式定义了对象之间一对多的关系。
2.主体(也就是可观察者)用一个共同的接口来更新观察者。
3.观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
4.使用此模式时,你可从被观察者推(push)或啦(pull)数据,(然而,推的方式被认为更“正确”)。
5.有多个观察者时,不可以依赖特定的通知次序。
6.Java中有多种观察者模式的实现,包括了通用的java.util.Observable.
7.要注意java.util.Observable实现上所带来的一些问题。
8.如果有必要的化,可以实现自己的Observable,这并不难。
9.Swing大量使用观察者模式,许多GUI框架也是如此
10.此模式也别应用于很多地方,例如:JavaBeans、RMI。

装饰者模式:
动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的代替方案。
eg:咖啡中加入各种调料;java.io包

要点:
1.继承属于扩展形式之一,但不见得是达到弹性设计的最佳方式。
2.在我们的设计中,应该允许行为可以被扩展,而无须修改现有的代码。
3.组合和委托可用于在运行时动态地加上新的行为。
4.除了继承,装饰着模式也可以让我们扩展行为。
5.装饰者模式意味着一群装饰者类,这些类用来包装具体组件。
6.装饰者类反映出被装饰的组件类型(事实上,它们具有相同的类型,都经过接口或继承实现)。
7.装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。
8.你可以使用无数个装饰者包装一个组件。
9.装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。
10.装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂。

设计原则
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
4.为交互对象之间的松耦合设计而努力。
5.类应该对扩展开放,对修改关闭。

阅读全文
0 0