23设计模式之中介者模式(Mediator)
2015-09-21 11:52
501 查看
返回首页
2. 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
3. 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
Mediator:中介者定义一个接口用于与各同事(Colleague)对象通信。
2.
ConcreteMediator:具体中介者通过协调各同事对象实现协作行为。了解并维护它的各个同事。
3.
Colleagueclass:每一个同事类都知道它的中介者对象。每一个同事对象在需与其他的同事通信的时候,与它的中介者通信
b) ColleagueA.swift
c) ColleagueB.swift
普通员工努力工作
客户来了...
前台注意了!
通知错误...
一、概述
Mediator属于行为型模式中的一种,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。二、适用性
1. 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。2. 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
3. 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
三、参与者
1.Mediator:中介者定义一个接口用于与各同事(Colleague)对象通信。
2.
ConcreteMediator:具体中介者通过协调各同事对象实现协作行为。了解并维护它的各个同事。
3.
Colleagueclass:每一个同事类都知道它的中介者对象。每一个同事对象在需与其他的同事通信的时候,与它的中介者通信
四、类图
五、代码实现
1. Mediator:中介者定义一个接口用于与各同事(Colleague)对象通信。
Mediator.swift// // Mediator.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// Mediator中介者定义一个接口用于与各同事(Colleague)对象通信。 protocol Mediator { // MARK: 通知 func notice(content:String) }
2. ConcreteMediator:具体中介者通过协调各同事对象实现协作行为。了解并维护它的各个同事。
ConcreteMediator.swift// // ConcreteMediator.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// ConcreteMediator具体中介者通过协调各同事对象实现协作行为。 class ConcreteMediator: Mediator { /// 员工A private let ca:Colleague = ColleagueA() /// 员工B private let cb:Colleague = ColleagueB() func notice(content: String) { switch(content) { case "boss":// 老板来了, 通知员工A print("老板来了...") ca.action() case "client":// 客户来了, 通知前台B print("客户来了...") cb.action() default: print("错误通知...") } } }
3. Colleagueclass:每一个同事类都知道它的中介者对象。每一个同事对象在需与其他的同事通信的时候,与它的中介者通信。
a) Colleague.swift// // Colleague.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// Colleague接口 protocol Colleague { // MARK: 通知 func action() }
b) ColleagueA.swift
// // ColleagueA.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// 同事A class ColleagueA: Colleague { func action() { print("普通员工努力工作") } }
c) ColleagueB.swift
// // ColleagueB.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// 同事B class ColleagueB: Colleague { func action() { print("前台注意了!") } }
六、测试
1. 代码
// 中介者模式 let med = ConcreteMediator() // 老板来了 med.notice("boss") // 客户来了 med.notice("client") // 通知错误 med.notice("other")
2. 运行结果
老板来了...普通员工努力工作
客户来了...
前台注意了!
通知错误...
相关文章推荐
- HSV RGB颜色空间互转
- HDU 3715 Go Deeper(2-sat)
- UVA 401
- Ajax-Js实现
- form表单中method的get和post区别
- 关于servlet的读书笔记
- Linux查看CPU和内存使用情况
- undefined reference to `raise'
- Struts2 报500错误
- 小农思想在做崇
- 如何免安装异机恢复sap bi系统及数据库
- 使用SAX方式生成XML文档
- centos7全局安装composer
- Android工具类之LogUtil
- 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
- 解决JS浮点数(小数)计算加减乘除的BUG
- Java对象的序列化与反序列化
- 经典String str = new String("abc")内存分配问题
- UVA10010 从八个方向上找相同串
- HDFS读写文件BUG