- 浏览: 59844 次
- 性别:
- 来自: 北京
文章分类
最新评论
1、意图
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2.动机
面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。
虽然将一个系统分割成许多对象通常可以增加复用性,但是对象间相互连接的激增又会降低其可复用性。大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作——系统表现为一个不可分割的整体。而且,对系统的行为进行任何较大的改动都十分困难,因为行为被分布在许多对象中。结果是,你可能不得不定义很多子类以定制系统的行为。
可以通过将集体行为封装在一个单独的中介者(mediator)对象中以避免这个问题。中介者负责控制和协调一组对象的交互。中介者充当一个中介以使组中的对象不再相互显示引用。这些对象仅知道中介者,从而减少了相互连接的数目。
3、适用性
在下列情况下使用中介者模式:
一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
想定制一个分布在多个类中的行为,而有不像生成太多的子类。
4、结构
5、参与者
Mediator(中介者,如DialogDirector)
——中介者定义一个接口用于与各同事(Colleague)对象通信
ConcreteMediator(具体中介者,如FontDialogDirector)
——具体中介者通过协调各同事对象实现协调行为。
——了解并维护它的各个同事。
Colleague class(同事类,如ListBox,EntryField)
——每一个同事类都知道它的中介者对象。
——每一个同事对象都在需要与其他的同事通信的时候,与它的中介者通信。
6、代码实例
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2.动机
面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。
虽然将一个系统分割成许多对象通常可以增加复用性,但是对象间相互连接的激增又会降低其可复用性。大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作——系统表现为一个不可分割的整体。而且,对系统的行为进行任何较大的改动都十分困难,因为行为被分布在许多对象中。结果是,你可能不得不定义很多子类以定制系统的行为。
可以通过将集体行为封装在一个单独的中介者(mediator)对象中以避免这个问题。中介者负责控制和协调一组对象的交互。中介者充当一个中介以使组中的对象不再相互显示引用。这些对象仅知道中介者,从而减少了相互连接的数目。
3、适用性
在下列情况下使用中介者模式:
一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
想定制一个分布在多个类中的行为,而有不像生成太多的子类。
4、结构
5、参与者
Mediator(中介者,如DialogDirector)
——中介者定义一个接口用于与各同事(Colleague)对象通信
ConcreteMediator(具体中介者,如FontDialogDirector)
——具体中介者通过协调各同事对象实现协调行为。
——了解并维护它的各个同事。
Colleague class(同事类,如ListBox,EntryField)
——每一个同事类都知道它的中介者对象。
——每一个同事对象都在需要与其他的同事通信的时候,与它的中介者通信。
6、代码实例
import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; //Colleague interface interface Command { void execute(); } //Abstract Mediator interface IMediator { public void book(); public void view(); public void search(); public void registerView(BtnView v); public void registerSearch(BtnSearch s); public void registerBook(BtnBook b); public void registerDisplay(LblDisplay d); } //Concrete mediator class Mediator implements IMediator { BtnView btnView; BtnSearch btnSearch; BtnBook btnBook; LblDisplay show; //.... public void registerView(BtnView v) { btnView = v; } public void registerSearch(BtnSearch s) { btnSearch = s; } public void registerBook(BtnBook b) { btnBook = b; } public void registerDisplay(LblDisplay d) { show = d; } public void book() { btnBook.setEnabled(false); btnView.setEnabled(true); btnSearch.setEnabled(true); show.setText("booking..."); } public void view() { btnView.setEnabled(false); btnSearch.setEnabled(true); btnBook.setEnabled(true); show.setText("viewing..."); } public void search() { btnSearch.setEnabled(false); btnView.setEnabled(true); btnBook.setEnabled(true); show.setText("searching..."); } } //A concrete colleague class BtnView extends JButton implements Command { IMediator med; BtnView(ActionListener al, IMediator m) { super("View"); addActionListener(al); med = m; med.registerView(this); } public void execute() { med.view(); } } //A concrete colleague class BtnSearch extends JButton implements Command { IMediator med; BtnSearch(ActionListener al, IMediator m) { super("Search"); addActionListener(al); med = m; med.registerSearch(this); } public void execute() { med.search(); } } //A concrete colleague class BtnBook extends JButton implements Command { IMediator med; BtnBook(ActionListener al, IMediator m) { super("Book"); addActionListener(al); med = m; med.registerBook(this); } public void execute() { med.book(); } } class LblDisplay extends JLabel { IMediator med; LblDisplay(IMediator m) { super("Just start..."); med = m; med.registerDisplay(this); setFont(new Font("Arial", Font.BOLD, 24)); } } class MediatorDemo extends JFrame implements ActionListener { IMediator med = new Mediator(); MediatorDemo() { JPanel p = new JPanel(); p.add(new BtnView(this, med)); p.add(new BtnBook(this, med)); p.add(new BtnSearch(this, med)); getContentPane().add(new LblDisplay(med), "North"); getContentPane().add(p, "South"); setSize(400, 200); setVisible(true); } public void actionPerformed(ActionEvent ae) { Command comd = (Command) ae.getSource(); comd.execute(); } public static void main(String[] args) { new MediatorDemo(); } }
发表评论
-
STRATEGY(策略)——对象行为型模式
2013-06-17 16:19 6441、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
STATE(状态)—— 对象行为型模式
2013-06-14 16:49 7391、意图 允许一个 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 6421、意图 定义对象 ... -
CHAIN OF RESPONSIBILITY(职责链) —— 对象行为型模式
2013-06-06 16:32 6151、意图 使多个对象都有机会处理请求,从而避免请求的发 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7231、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 6671、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7191、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 6941、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
设计模式的三大分类解析
2013-05-24 14:48 805设计模式在功能上 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 6701、意图 定义一个 ... -
ADAPTER(适配器) --- 类对象结构型模式
2013-03-28 11:33 5571、意图 将一个类的接口转化成客户希望的另外一个接口。 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7031、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 6901、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 8521、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 5951、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6501、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7321. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 6711、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 6831、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 727本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
5.5 MEDIATOR(中介者)——对象行为型模式 5.6 MEMENTO(备忘录)——对象行为型模式 5.7 OBSERVER(观察者)——对象行为型模式 5.8 STATE(状态)——对象行为型模式 5.9 STRATEGY(策略)——对象行为型模式 ...
5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为...
遍历聚合对象中的元素——迭代器模式(四) 遍历聚合对象中的元素——迭代器模式(五) 遍历聚合对象中的元素——迭代器模式(六) 中介者模式-Mediator Pattern 协调多个对象之间的交互——中介者模式(一) 协调多...
5.5MediatorPattern(中介者模式) 214 5.5.1定义 214 5.5.2现实示例——机场控制塔 215 5.5.3C#实例——聊天室 216 5.5.4Java实例——多线程通信 220 5.5.5优势和缺陷 223 5.5.6应用情景 223 5.6Memento...
5.5MediatorPattern(中介者模式) 214 5.5.1定义 214 5.5.2现实示例——机场控制塔 215 5.5.3C#实例——聊天室 216 5.5.4Java实例——多线程通信 220 5.5.5优势和缺陷 223 5.5.6应用情景 223 5.6Memento...
行为模式 13、CHAIN OF RESPONSIBLEITY —晚上去上英语课,为了好开溜坐到了最后一排,哇,前面 、 坐了好几个漂亮的 MM 哎, 找张纸条, 写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”, 纸条就一个接一...
pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...
pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...
pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...
pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...
pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/...
pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/...
pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/...
pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...
pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...
pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/...
动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...