您的位置:首页 > 其它

设计模式-概念(策略模式,观察者模式,装饰者模式)

2017-11-22 16:48 253 查看
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

如果每次新的需求一来,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区分。

把会变化的部分取出来并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。

分开变化和不会变化的部分。

学习要点:

①知道OO基础,并不足以让你设计出良好的OO系统

②良好的OO设计必须具备可复用、可扩充、可维护三个特性

③模式可以让我们建造出具有良好OO设计质量的系统

④模式呗认为是历经验证的OO设计经验

⑤模式不是代码,而是针对设计问题的通用解决方案,你可把它们应用到特定的应用中

⑥模式不是被发明,而是被发现

⑦大多数的模式和原则,都着眼于软件变化的主题

⑧大多数的模式都允许系统局部改变独立于其他部分

⑨我们常把系统中会变化的部分抽出来封装

⑩模式让开发人员之间有共享的语言,能够最大化沟通的价值

观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

在观察者模式中,会改变的时主题的状态,以及观察者的数目和类型。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题,这就叫提前规划。

主题与观察者都使用接口:观察者利用主题接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的有点。

观察者模式利用“组合”将许多观察者组合进主题中,对象之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式而产生的。

学习要点:

①观察者模式定义了对象之间一对多的关系

②主题(也就是可观察者)用一个共同的接口来更新观察者

③观察者和可观察者之间用松耦合方式结合(loosecoupling),可观察者不知道观察者的细节,只知道观察者实现了观察者接口

④使用此模式时,你可从观察者处推(push)或拉(pull)数据,(然而,推的方式被认为更“正确”)

⑤有多个观察者时,不可以依赖特定的通知次序

⑥Java有多种观察者模式的实现,包括了通过java.util.Observable

⑦要注意java.util.Observable实现上所带来的一些问题

⑧如果有必要的话,可以实现自己的Obserable,这并不难,不要害怕

⑨Swing大量使用观察者模式,许多GUI框架也是如此

⑩此模式也被应用在许多地方,例如:JavaBeans,RMI

装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

学习要点:

①继承属于扩展形式之一,但不见得是到达弹性设计的最佳方式

②在我们的设计中,应该允许行为可以被扩展,而无须修改现有的代码

③组合和委托可用于在运动时动态地加上新的行为

④除了继承,装饰者模式也可以让我们扩展行为

⑤装饰者模式意味着一群装饰者类,这些类用来包装具体组件

⑥装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的

⑦你可以用无数个装饰者包装一个组件

⑧装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型

⑨装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐