转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6515573.html
一:命令模式
调用者发出请求命令——请求命令类调用接收者的处理方法
请求者发出请求——导致命令对象被创建——命令对象调用执行函数——执行函数中调用接收对象的处理函数
实例:
请求者:遥控器
接收者:电视
命令对象:开电视、关电视、换频道,分别调用了电视的开、关、换频道
二:访问者模式
即:把对某一种数据对象的操作集合起来成为一个操作类。
抽象访问者:定义了有哪些操作方法
具体访问者:针对具体的对象制定具体操作方法
抽象元素:定义了对象的大致构成
具体元素:定义了对象的具体构成、具体操作,而操作是通过调用相应的具体访问者的操作方法来实现的
对象结构:相当于一个容器,用来add。remove具体的对象,并指定具体的访问者,然后在方法中通过具体访问者调用方法来处理对象们。
三:中介者模式
抽象中介类:定义了一系列中介者需要有的成员与方法:一个成员List,统一管理所有连接到该中介者的对象;add、remove对象的方法;遍历各对象执行对象方法调用的方法;
具体中介类:实现具体的add、remove、遍历方法
同事类(被中介调停的类):定义具体的功能方法(如:修改属性、某些操作)
这里,聊天室就是中介,Member有两个,普通会员和钻石会员,他们各自的sendXX方法不同,chatroom成员则标识当前member是属于哪个聊天室的。在相应的聊天室类对象中保存着所有连接到它这的member们,并且检测到有member发送信息过来就逐个泛洪到其他member中去。
四:职责链模式
职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
Handler:抽象处理者类,定义了一个指向下一个处理者的指针,以及当前的处理方法
具体处理者:实现具体的处理方法:如果当前对象能处理请求则处理好并返回结果,如果不能,则把请求发给下一个处理者对象:(调用成员(下一个处理者)的处理方法)
五:观察者模式:一系列对象根据一个被观察对象的行为而做出不同反应
建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。
目标可以有任意数目的与之相依赖的观察者,一旦目标的状态发生改变,所有的观察者都将得到通知。
适用情况:
一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
一个对象必须通知其他对象,而并不知道这些对象是谁。
需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
观察者模式包含如下角色:
Subject: 被观察的目标的抽象,定义连接方法(管理观察者们)、接触连接(移除一个观察者)、通知方法(遍历观察者数组,向他们传递一个信号)
ConcreteSubject: 具体目标,实现subject,把具体的管理、移除、通知方法实现出来。
Observer: 观察者抽象,定义一个抽象的响应观察目标信号的相应行为方法()
ConcreteObserver: 具体观察者,实现observer接口,把该子类具体的响应行为实现出来。
猫被老鼠、狗观察,猫叫(发出信号),老鼠跑,狗叫(响应)
通知的实现:
观察者类中定义一个函数作为响应函数(执行数据修改等响应),然后在观察目标中定义一系列的观察者对象,在某事件触发下(如:datachange()),则“通知”观察者改变(遍历观察者对象数组,通过 对象.response() 调用响应函数执行相应的响应操作)。
六:策略模式