GOF23设计模式之中介者模式的实现

/**
 * 时间:2015年4月12日09:57:11
 * 抽象中介类,定义了同事对象到中介者对象的接口
 *
 */
package com.bjsxt.cn.mediator;
public interface Mediator {
 public void register(String dname, Deparment d);
 public void command(String dname);
}



/**
 * 时间:2015年4月12日09:59:50
 * 抽象同事类:抽象出所有部门的共同之处。
 *
 */
package com.bjsxt.cn.mediator;
public interface Deparment {
 public void selfAction();
 public void outAction();
}




/**
 * 时间:2015年4月12日10:03:03
 * 具体同事类,实现了抽象同时类,便于组织和管理
 */
package com.bjsxt.cn.mediator;
public class Developement implements Deparment {
 private Mediator m;//所有部门都和中介打交道(在这里指的是总经理)
 
 /**
  * 在具体同事对象的构造器中传入中介者
  * @param m 中介者
  */
 public Developement(Mediator m) {
  super();
  this.m = m;
  m.register("development", this);
 }
 @Override
 public void selfAction() {
  
  System.out.println("专心科研,努力研发创新的产品。");
  
 }
 @Override
 public void outAction() {
  System.out.println("我研发部同仁为你提供技术。");
  m.command("financial");
 }
}




/**
 * 时间:2015年4月12日10:08:24
 * 具体同事对象:需要有一个中介者对象进行交互
 */
package com.bjsxt.cn.mediator;
public class Financial implements Deparment {
 private Mediator m;
 
 
 public Financial(Mediator m) {
  super();
  this.m = m;
  m.register("financial", this);
 }
 @Override
 public void selfAction() {
  System.out.println("妈哒,lz天天数钱,不知道怎么花。");
  
 }
 @Override
 public void outAction() {
  System.out.println("财务部拨款到位,好好干,兄弟们");
  System.out.println("我大财务部提供支持,愿竭诚为你服务。");
 
 }
}





/**
 * 时间:2015年4月12日10:12:49
 * 具体同事对象:市场部
 */
package com.bjsxt.cn.mediator;
public class Market implements Deparment {
 private Mediator m;
 
 
 public Market(Mediator m) {
  super();
  this.m = m;
  m.register("market", this);
 }
 @Override
 public void selfAction() {
  System.out.println("我市场部调研市场,选定要生产的产品");
 }
 @Override
 public void outAction() {
  System.out.println("已经定好创新产品,需要研发部提供技术,财务部提供资金");
  m.command("development");
 }
}




/**
 * 时间:2015年4月12日10:24:01
 * 具体中介类:实现抽象类的方法,它需要知道所有具体同事类,并从具体同事接受消息,向具体对象发出命令
 */
package com.bjsxt.cn.mediator;
import java.util.HashMap;
import java.util.Map;
public class President implements Mediator {
 private Map<String, Deparment> map = new HashMap<String, Deparment>();
 @Override
 public void register(String dname, Deparment d) {
  map.put(dname, d);
 }
 @Override
 public void command(String dname) {
  map.get(dname).selfAction();
  map.get(dname).outAction();
  
 }
}




/**
 * 测试程序
 * 时间:2015年4月12日10:23:26
 *
 */
package com.bjsxt.cn.mediator;
public class Client {
 public static void main(String[] args) {
  Mediator mediator = new President();
  Financial fin = new Financial(mediator);
  Market market = new Market(mediator);
  Developement dep = new Developement(mediator);
  
  market.selfAction();
  market.outAction();
 }
}
/*
我市场部调研市场,选定要生产的产品
已经定好创新产品,需要研发部提供技术,财务部提供资金
专心科研,努力研发创新的产品。
我研发部同仁为你提供技术。
妈哒,lz天天数钱,不知道怎么花。
财务部拨款到位,好好干,兄弟们
我大财务部提供支持,愿竭诚为你服务。
 *
 *
 */



时间: 2024-10-18 10:44:29

GOF23设计模式之中介者模式的实现的相关文章

【GOF23设计模式】中介者模式

来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_中介者模式.同事协作类.内部类实现 1 package com.test.mediator; 2 /** 3 * 同事类的接口 4 */ 5 public interface Department { 6 void selfAction();//做本部门的事情 7 void outAction();//向总经理发出申请 8 } 1 package com.test.mediator; 2 3 public class

GOF23设计模式之中介者模式的理解

 中介模式Mediator 场景 假如没有总经理,下面有三个部门,财务部,市场部,研发部.财务部要发工资,让大家和对公司需要跟市场部和研发部都通气.市场部要接个新项目,需要研发部技术支持,需要财务部处理资金.市场部跟各个部门打交道.财务部发钱了,需要跑去和研发部和市场部打交道.研发部研发产品,市场部做调研,销售缺少资金又需要去找财务部.在这种情况下,虽然只有三个部门但是非常乱.者是因为在未说明的情况下,我们把这组织长了以中国网状结构的图形组织关系.多对对.   实际上,倘若公司有了总经理(当

设计模式之中介者模式(Mediator)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式之中介者模式20170731

行为型设计模式之中介者模式: 一.含义 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 同事角色与其他同时角色通信的时候,一定要通过中介者角色(中介者封装了各个同事类之间的逻辑关系) 二.代码说明 1.主要有两个角色 1)中介者角色 通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色. 2)同事角色 每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作. 每个同事类的行为分

设计模式(中介者模式-对象去耦)

声明:本系列文章内容摘自<iOS设计模式> 中介者模式 用一个对象来封装一系列对象的交互方式.中介者使个对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 何时使用中介者模式 1.对象间的交互虽定义明确然而非常复杂,导致椅子对象彼此相互依赖而且难以理解: 2.因为对象引用了许多其他对象并与其通信,导致对象难以复用: 3.想要制定一个分布在多个对象中的逻辑或行为,又不想生成太多子类. 举个例子 有三个视图,我们可能需要两两之间进行跳转,类比于公司内同时每两个人都有可能

【设计模式】——中介者模式

中介者模式(Mediator),用一个中介者对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. Colleague叫做抽象同事类,而ConcreteColleague是具体同事类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们却都认识中介者对象,Mediator是抽象中介者,定义了同事对象到中介者对象的接口,ConcreteMediator是具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从具体同事接

折腾Java设计模式之中介者模式

博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 通俗点来讲就是提供一个中介平台,说到平台,那其实很容易联系到我们很熟悉的房地产中介.我们可以直接通过这个平台得到我们想要的信息,不用对象自身与其他对象交互. 买房子租房子就不需要去找房东,只需要在中介那里获取相应的×××信息.如下图那样,两方只

设计模式之: 中介者模式

一.前言 平常我们写一个聊天软件,如果我们只是各个客户端之间连接聊天,那估计我们会写的想哭,那如果我们用服务器作为中间媒介,通过服务器来完成转发,群聊等客户端之间的连接,那样我们就可以最大程度的为各个客户端之间解耦,把它们之间的通信方法抽出来单独实现, 如图1就是不使用中介媒体的时候的结构图: 如图2就是使用我们所说的服务器作为中间媒介的情况的结构图: 二.中介模式 图二就是我们所说的中介模式! 在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装

大话设计模式_中介者模式(Java代码)

中介者模式:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 简单描述:1个抽象Colleague,其派生多个具体ConcreteColleague,每个具体ConcreteColleague都认识一个具体中介者.他们发送消息的时候是通过中介者发送.1个中介者,具体中介者认识所有的ConcreteColleague(即持有所有具体ConcreteColleague的引用),它提供向其他具体ConcreteColleag