java23种设计模式七(连载)

七、调停者模式

调停者模式包装了一系列相互作用的对象,使得这些对象相互之间不必显式的引用,从而极大的降低了对象间的耦合性,调停者模式通过引入调停者作为中间人,使得对象间既不用相互作用又能相互影响。

调停者模式一般有以下几个角色:

调停者:只是一个接口,定义了同事对象到调停者对象间的接口,可以是一个或多个方法

具体的调停者:实现调停者的方法,将所有同事对象引入进来,从而负责协同各同事之间的关系

同事对象:抽象出调停者到同事对象之间的接口

具体的同事对象:实现不同同事之间具体所做的工作。

下面举个生动的例子以便更清晰的理解调停者模式:

电脑主机的各个部分:CPU、显卡、硬盘、光驱等配件,都是通过主板来调配的,如果没有主板,那么各配件相互协同比如自己去实现,而各个配件之间的接口又各不相同,必须根据没配件制定不同的转换器,那么若加上主板,主板作为调停者,他知道如何和每个配件打交道,各配件只需要把需要做的事情交给主板,主板再通知到每个配件,这样工作就能更好的协同完成。

接下来以电脑主板为例,请看具体的实现代码:

public interface Mediator {

	public void changed(Colleague colleague);
}
public abstract class Colleague {

	private Mediator mediator;

	public Colleague(Mediator mediator){
		this.mediator = mediator;
	}

	public Mediator getMediator() {
		return mediator;
	}

}
public class CDDriver extends Colleague {

	private String data = "";

	public CDDriver(Mediator mediator) {
		super(mediator);
	}

	public String getData() {
		return data;
	}

	public void readCD(){
		System.out.println("打开CD");
		this.data = "读取光盘";
		getMediator().changed(this);
	}

}
public class CPU extends Colleague {

	private String data = "";

	public CPU(Mediator mediator) {
		super(mediator);
	}

	public String getData() {
		return data;
	}

	public void executeData(String data){
		this.data = data;
		System.out.println("CPU正在处理data:"+data);
		getMediator().changed(this);
	}

}
public class Display extends Colleague {

	public Display(Mediator mediator) {
		super(mediator);
	}

	public void showData(String data){
		System.out.println("当前正在显示的数据是:"+data);
	}
}
public class MainBoard implements Mediator {

	private CDDriver driver = null;
	private CPU cpu = null;
	private Display display = null;

	public void setDriver(CDDriver driver) {
		this.driver = driver;
	}

	public void setCpu(CPU cpu) {
		this.cpu = cpu;
	}

	public void setDisplay(Display display) {
		this.display = display;
	}

	@Override
	public void changed(Colleague colleague) {
		if(colleague instanceof CDDriver){
			openDriverData();
		}else{
			openCPU();
		}
	}

	private void openDriverData(){
		String data = driver.getData();
		cpu.executeData(data);
	}

	private void openCPU(){
		String data = cpu.getData();
		display.showData(data);
	}

}
public class Client {

	public static void main(String[] args) {
		MainBoard mediator = new MainBoard();

		CDDriver driver = new CDDriver(mediator);
		CPU cpu = new CPU(mediator);
		Display display = new Display(mediator);

		mediator.setDriver(driver);
		mediator.setCpu(cpu);
		mediator.setDisplay(display);

		driver.readCD();
	}
}

在实际案例中,比如OA系统中的工作流如果采用调停者模式是个比较不错的选择,每个部门或者每个任务都是相互独立的,完成一个任务后,交给调停者,让调停者通知下一个同事,完成相应的工作。

时间: 2024-11-08 23:58:19

java23种设计模式七(连载)的相关文章

java23种设计模式六(连载)

六.观察者模式 定义:一种对象对另一种对象存在某种依赖关系,当一个对象发生改变的时候,需要改变另一个对象的状态. 在设计一个系统的时候,经常会有这样一个需求,如果一个对象发生改变,需要改变另一个对象的数据.比如:android客户端的一个控件ListView,当数据发生改变的时候,我们需要通知对象,刷新当前控件. 观察者模式一般有以下四个角色: 观察者:作用是观察每个对象是否需要改变 被观察者:只是一个接口,观察者观察的接口 具体的被观察者:这个是观察者具体要观察的对象 说的比较抽象,具体我们看

java23种设计模式九(连载)

九.责任链模式 通过字面意思我们大概能想到他是一个链条,每个人只负责自己可以做的事,不能做的事交给另外的人来做,这样就形成了一个链条,比如软件开发流程,客户提出了需求,但是要开发出一套完整的软件,要有美工.产品经理.程序员等角色,那么产品经理负责设计产品,产品设计完了后交给美工来做效果图,最后由程序员来实现功能.这就是一种责任链模式. 接下来请看实现的代码: public abstract class Handler { private Handler handler; public Handl

java23种设计模式八(连载)

八.代理模式 代理模式顾名思义就是构建一个代理类,来接管原来的类的工作,比如家里水管爆了,自己不修,则请工人来维修,买房子,自己请中介帮忙买,例子的工人.中介就是一个代理.下面请看代码实现: public interface Source { public void method(); } public class CocretSource implements Source { @Override public void method() { System.out.println("执行原始方

java23种设计模式十(连载)

十.享元模式 享元模式(Flyweight Pattern)顾名思义,就是多个对象共享一个对象,即共用一个内存地址,在实际应用中,采用享元模式的好处就是可以大大节约内存空间,提高系统的运行效率.享元模式经常会出现在工厂模式当中,下面是具体的实现代码: 首先创建一个享元类: public abstract class Flyweight { public abstract void operation(); } /** * 具体的享元类 * @author Lynn * */ public cla

java23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用 设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我

java23种设计模式提纲

设计模式的六大原则: 1.单一职责原则 There should never be more than one reason for a class to change. 2.接口隔离原则 Clients should not be forced to depend upon interfaces that they don't use. The dependency of one class to another one should depend on the smallest possib

Java23种设计模式学习笔记【目录总贴】

以下是各个模式的简要介绍,点击设计模式名称进入对应设计模式的详细解释页面.学习资料来源于网络,如有问题欢迎留言. 创建型模式:关注对象的创建过程 1.单例?模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高,但是可以延时加载) 其他: 双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题.不建议使用) 静态内部类式(线程安全,调用效率高.但是可以延时加载) 枚举单例(线程安全,调用效率高,不

java23种设计模式的有趣见解

 创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西, 虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅" 就行了.麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可 .消费者无须修改就可以接纳新产品.缺点是当产品修改时,工厂类也要做相应的修改 .如:如何创建及如何向客户端提供. 2.BUILDER-MM 最爱听的就是"我爱你&

java23种设计模式之一: 工厂模式

工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象. 介绍 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行. 主要解决:主要解决接口选择的问题. 何时使用:我们明确地计划不同条件下创建不同实例时. 如何解决:让其子类实现工厂接口,返回的