- 浏览: 63118 次
- 性别:
- 来自: 北京
文章分类
最新评论
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 6911、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
STATE(状态)—— 对象行为型模式
2013-06-14 16:49 7901、意图 允许一个 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 7131、意图 定义对象 ... -
CHAIN OF RESPONSIBILITY(职责链) —— 对象行为型模式
2013-06-06 16:32 6541、意图 使多个对象都有机会处理请求,从而避免请求的发 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7591、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 7031、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7751、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 7261、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
设计模式的三大分类解析
2013-05-24 14:48 853设计模式在功能上 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 7051、意图 定义一个 ... -
ADAPTER(适配器) --- 类对象结构型模式
2013-03-28 11:33 6011、意图 将一个类的接口转化成客户希望的另外一个接口。 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7461、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 7291、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 9201、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 6361、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6871、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7791. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 7071、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 7251、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 779本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
标题和描述均提到了"C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式",这明确指向了一个特定的设计模式——中介者模式(Mediator Pattern),并且是在C#语言环境下的应用。下面将详细阐述这一设计...
**中介者模式(Mediator Pattern)**是一种行为设计模式,其主要目的是降低多个对象之间的通信复杂性,将这些对象的直接交互转化为与一个中心对象——中介者的交互。在C#中,中介者模式的应用能够有效地减少类之间的...
中介者模式将这些依赖关系集中到一个单独的对象——中介者上,使得各个对象只与中介者进行交互,而不再直接与其他对象通信。 在提供的文件列表中,我们可以看到以下组件: 1. `DepModel.java` 和 `DepUserModel....
5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为...
中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...
中介模式(Mediator Pattern)属于行为设计模式,它旨在降低多个对象之间的复杂交互,通过引入一个中介对象来封装原本复杂的网状结构,使得这些对象之间的通信变得简单和可复用。在Java中,我们可以很容易地实现这个...
遍历聚合对象中的元素——迭代器模式(四) 遍历聚合对象中的元素——迭代器模式(五) 遍历聚合对象中的元素——迭代器模式(六) 中介者模式-Mediator Pattern 协调多个对象之间的交互——中介者模式(一) 协调多...
3. **行为型模式**:包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式...
- 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复...
6. **Mediator模式**:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。这种模式适用于对象之间有复杂的交互,这些交互应被动态地规定...
中介者模式引入一个中心组件——交通信号控制器,作为各个信号灯之间的协调者,使得它们之间的交互通过这个中心组件进行,从而降低了耦合度。 首先,我们需要创建三个类,分别代表红、黄、绿信号灯。这些类通常包含...
其中包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...
总之,设计模式是软件开发中的宝贵财富,而中介者模式是其中一种重要的行为模式,能有效简化多对象之间的交互,提高系统的可读性和可维护性。理解和熟练运用中介者模式,对于提升软件质量有着显著的帮助。
5. 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 6. 观察者模式(Observer):当对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 7. 状态模式(State):允许一个对象...
中介者模式是一种行为型设计模式,它用一个中介对象来封装一系列的对象交互。该模式减少了对象间的直接依赖关系,使得各个对象之间不再显式地相互引用,而是将依赖关系转交给中介者。文章中通过“MM之间的沟通”,...
6. Mediator模式,中介者模式,用一个中介对象来封装一系列的对象交互。 ***mand模式,命令模式,将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。 8. Visitor模式,访问者模式,表示一个作用于某...
- **3.6 Mediator模式**:中介者模式用一个中介对象来封装一系列的对象交互。 - **3.7 Command模式**:命令模式将一个请求封装为一个对象,从而使用户可以用不同的请求来参数化客户端。 - **3.8 Visitor模式**:...
5. 中介者模式(Mediator):定义一个中介对象,协调多个对象之间的交互。 6. 备忘录模式(Memento):保存对象的状态,以便在需要时恢复。 7. 观察者模式(Observer):当对象状态改变时,通知所有依赖它的观察者。...