Java设计模式---命令模式、观察者模式

  我学习设计模式,老师推荐的是下面四本书

 

我看的是第一本和第三本,听师兄说第三本比较白话易懂,所以我现在看的是第三本。

在这之前,我说一下面向对象编程,面向对象要的是可维护(如果要改动,只需要改要改动的地方,其他地方不用动),可扩展(如果要添加,只需要添加新的),可复用(重复使用)。面向对象通过封装、继承、多态把程序的耦合度降低,用设计模式使得程序更加的灵活,容易修改并且易于复用。

面向对象的几个基本原则:面向抽象原则(设计一个类时,不让该类面向具体的类,而是面向抽象类或接口 ),开-闭原则(设计应当对扩展开放,对修改关闭。遵守开-闭原则的设计一定易于维护);高内聚-低耦合原则(如果类中的方法是一组相关的行为,则称该类是高内聚的,反之称为低内聚的。所谓低耦合就是尽量不要让一个类含有太多的其它类的实例的引用,以避免修改系统的其中一部分会影响到其它部分。)

记录模式的四个基本要素:1.名称: 一个模式的名称高度概括该模式的本质,有利于该行业统一术语、便于交流使用。2.问题 描述应该在何时使用模式,解释设计问题和问题存在的前因后果,描述在怎样的环境下使用该模式。3.方案 描述设计的组成部分,它们之间的相互关系及各自的职责和协作方式。4.效果 描述模式的应用效果及使用模式应当权衡的问题。主要效果包括使用模式对系统的灵活性、扩充性和复用性的影响。

首先,我讲一下为什么要学习设计模式:学习设计模式不仅可以使我们使用好这些成功的模式,更重要的是可以使我们更加深刻地理解面向对象的设计思想,非常有利于我们更好地使用面向对象语言解决设计中的问题。

框架和模式的区别:框架是提供应用应用系统的集合,和模式的区别有三点,第一点是层次不同:模式更抽象;第二点是范围不同:模式是设计思想,框架是类的集合,相互关系:框架中包含模式;

命令模式(别名:动作,事务):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。模式的结构中包括四种角色:
  请求者(INVOKER)、接收者(RECEIVER)、命令(COMMAND)接口、 具体命令(CONCRETE COMMAND)。

命令模式的优点: 在命令模式中,请求者(INVOKER)不直接与接收者(RECEIVER)交互,即请求者(INVOKER)不包含接收者(RECEIVER)的引用,因此彻底消除了彼此之间的耦合。
 命令模式满足“开-闭原则”。如果增加新的具体命令和该命令的接受者,不必修改调用者的代码,调用者就可以使用新的命令对象;反之,如果增加新的调用者,不必修改现有的具体命令和接受者,新增加的调用者就可以使用已有的具体命令。

观察者模式(别名:依赖,发布-订阅):定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的结构中包括四种角色:主题(SUBJECT)、观察者(OBSERVER) 、具体主题(CONCRETESUBJECT) 、具体观察者(CONCRETEOBSERVER)。

观察者模式的优点:具体主题和具体观察者是松耦合关系。由于主题(SUBJECT)接口仅仅依赖于观察者(OBSERVER)接口,因此具体主题只是知道它的观察者是实现观察者(OBSERVER)接口的某个类的实例,但不需要知道具体是哪个类。同样,由于观察者仅仅依赖于主题(SUBJECT)接口,因此具体观察者只是知道它依赖的主题是实现主题(SUBJECT)接口的某个类的实例,但不需要知道具体是哪个类。
观察模式满足“开-闭原则”。主题(SUBJECT)接口仅仅依赖于观察者(OBSERVER)接口,这样,我们就可以让创建具体主题的类也仅仅是依赖于观察者(OBSERVER)接口,因此如果增加新的实现观察者(OBSERVER)接口的类,不必修改创建具体主题的类的代码。同样,创建具体观察者的类仅仅依赖于主题(OBSERVER)接口,如果增加新的实现主题(SUBJECT)接口的类,也不必修改创建具体观察者类的代码。

 

posted @ 2015-12-15 22:29  emma_zhang  阅读(1658)  评论(0编辑  收藏  举报