Java中介者设计模式

中介者设计模式是一种非常常见的设计模式,其中我们最为熟悉的就是我们的MVC框架,其中的C作为控制器就是一个具体的中介者,它的作用是把业务逻辑(Model),和视图(Viwe)隔离开来,使M V协调工作,把M运行的的结果和V代表的视图融合成一个前端可以展示的页面,减少M 和V的依赖关系,现在MVC框架也是一个非常成熟的框架,这也是中介者模式优点的一个体现。

下面是我在书上面看过的一个例子,它的大概意思就是进销存:

如图所示:

通过中介者之后使得各个类之间不用相互打扰,有什么需要交互的直接通知中介者,让中介者来统一解决。

下面我通过上面这个例子用代码模拟出来,里面其实也就讲解了,中介者所起到的作用:

1:抽象中介者:

package mediator;
//这是一个抽象中介者,
public abstract class AbstractorMediator {
	protected Purchase purchase;
	protected Sale sale;
	protected Stock stock;
	//构造函数
	public AbstractorMediator(){
		purchase = new Purchase(this);
		sale = new Sale(this);
		stock = new Stock(this);
	}
	//中介者中最重要的方法 叫做事件方法,处理多个对象之间的关系。
	public abstract void execute(String str,Object...objects);
}
package mediator;
/**
 *这是抽象中介者的具体实现类,里面其中定义了多个私有方法,其目的就是为了处理各个对象之间的依赖关系。
 * @author Administrator
 *
 */
public class Mediator extends AbstractorMediator{

	@Override
	public void execute(String str, Object... objects) {
		//中介者中最重要的方法
		if(str.equals("purchase.buy")){
			this.buyComputer((Integer)objects[0]);
		}else if(str.equals("sale.sell")){
			this.sellComputer((Integer)objects[0]);
		}else if(str.equals("sell.offSell")){
			this.offSell();
		}else if(str.equals("stock.clear")){
			this.clearStock();
		}
	}

	private void buyComputer(int number){
		int saleStatus = super.sale.getSaleStatus();
		if(saleStatus>80){
			System.out.println("采购电脑的 "+ number+" 台");
			super.stock.increase(number);
		}else{
			int buyNumber = number/2;
			System.out.println("采购IBM电脑: "+ buyNumber+" 台");
		}
	}

	private void sellComputer(int number){
		if(super.stock.getStockNumber()<number){
			super.purchase.buyIBMcomputer(number);
		}
		super.stock.decrease(number);
	}

	private void offSell(){
		System.out.println("折价销售电脑 "+ stock.getStockNumber());
	}

	private void clearStock(){
		super.sale.offSale();
		super.purchase.refuseBuyIBMcomputer();
	}

}
package mediator;
/**
 * 这个是同事类的抽象
 * @author Administrator
 *
 */
public class AbstractorColleague {
	protected AbstractorMediator mediator;
	public AbstractorColleague(AbstractorMediator _mediator){
		this.mediator = _mediator;
	}
}
package mediator;
//同事类的具体实现
public class Purchase extends AbstractorColleague{

	public Purchase(AbstractorMediator _mediator) {
		super(_mediator);
	}
	//采购电脑

	public void buyIBMcomputer(int number){
		super.mediator.execute("buy computer", number);
	}

	public void refuseBuyIBMcomputer(){
		System.out.println("dont buy it");
	}

}
package mediator;

import java.util.Random;

public class Sale extends AbstractorColleague{

	public Sale(AbstractorMediator _mediator) {
		super(_mediator);
	}
    //销售电脑
	public void sellIBMComputer(int number){
		super.mediator.execute("sale.sell", number);
		System.out.println("销售情况 "+ number +" 台");
	}

	public int getSaleStatus(){
		Random rand = new Random(System.currentTimeMillis());
		int saleStatus = rand.nextInt(100);
		System.out.println("电脑的销售情况为:"+saleStatus);
		return saleStatus;
	}
	//折扣处理
	public void offSale(){
		super.mediator.execute("sale.offSell");
	}
}
package mediator;

public class Stock extends AbstractorColleague{

	public Stock(AbstractorMediator _mediator) {
		super(_mediator);
	}

	private static int COMPUTER_NUM = 100;
	//增加库存数量
	public void increase(int number){
		COMPUTER_NUM = COMPUTER_NUM + number;
		System.out.println("库存数量为:"+COMPUTER_NUM);
	}
	//减少库存数量
	public void decrease(int number){
		COMPUTER_NUM = COMPUTER_NUM - number;
		System.out.println("库存数量为:"+COMPUTER_NUM);
	}
	//获得库存数量
	public int getStockNumber(){
		return COMPUTER_NUM;
	}
	//库存压力大了就通知 销售人员尽快销售
	public void clearStock(){
		System.out.println("清理存活数量为:"+COMPUTER_NUM);
		super.mediator.execute("stock.clear");
	}
}
package mediator;
//模拟客户端的测试类,(可以通过这个类来仔细研究一下中介者设计模式的具体执行流程)
public class Client {
	public static void main(String[] args) {
		AbstractorMediator mediator = new Mediator();
		System.out.println("采购人呀U呢采购电脑 ");
		Purchase purchase = new Purchase(mediator);
		purchase.buyIBMcomputer(100);

		System.out.println("销售人员销售电脑");
		Sale sale = new Sale(mediator);
		sale.sellIBMComputer(1);

		System.out.println("库房里人员清理库存");
		Stock stock = new Stock(mediator);
		stock.clearStock();
	}
}

中介者对象的定义:用一个中介对象封装一系列对象交互,使各个对象不需要显示的相互作用,从而使其耦合松散;而且可以独立改变他们之间的交互。

其中主要有三部分构成:

1:抽象中介者角色:它统一的定义一个接口,用于各个同事之间的通信。

2:具体中介者角色:协调各个同事角色实现协调行为,因此它必须依赖各个同事角色。

3:同事角色:每一个同事角色都知道中介者角色,而且与其他同事角色进行通信的时间必须通过中介者协调。一般同事角色有两种行为,一种是自发的行为,还有一种是必须依赖与中介者的行为  这是依赖方法。(具体可通过读代码)有时间我会总结一个非常通用简单的代码,放到这上面。该休息了,明天再说吧。

Java中介者设计模式

时间: 2024-12-25 18:14:40

Java中介者设计模式的相关文章

java 23 种设计模式

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 1.开闭原则(Open Clo

java 常用十种设计模式示例归纳 | 已打包请带走

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. GitHub地址DesignPattern 文章说明一个Demo,集合常用的十种设计模式,每个模式使用易被人们接受的案例讲述,按模式分包,使用设计模式前后对比,界面显示定义讲解,让你更深刻的了解每种设计模式.大部分案例来自张鸿洋的博客.如有错误欢迎指正,如有侵权,请联系我删除. 项目结构 包结构.png设计模式分为三种类型,共23种:创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模

设计模式(30)-----行为型模式-----中介者设计模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 介绍 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理. 何

Java中单态设计模式

Java中单态设计模式 2011-09-23 16:38:46|  分类: Java |  标签:technology!  |举报|字号 订阅 此博文是转自新浪博客中一名叫做"俊俊的BLOG“用户的一篇博文.感觉此博文确实很不错,所以在此拿出来分享一下!(笔者只是对其所举的代码略做了一些修改) 一概念: 设计模式:设计模式是指经过大量的实践总结和理论化之后的优选的代码结构.编程风格.以及解决问题的思路. 单态设计模式:采取一定的方法保证在整个软件系统中,对某个类只能产生一个对象实例,并且该类只提

(CZ深入浅出Java基础)设计模式笔记

一.面向对象思想设计原则 1.单一职责原则 其实就是开发人员经常说的"高内聚,低耦合",也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 2.开闭原则 核心思想是:一个对象对扩展开放,对修改关闭.其实开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是修改现有代码.也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去,如何能够做到这一点呢?这就需要借助于抽象和

Java单例设计模式的实现

1. 单例设计模式的定义 单例设计模式确保类只有一个实例对象,类本身负责创建自己的对象并向整个系统提供这个实例.在访问这个对象的时候,访问者可以直接获取到这个唯一对象而不必由访问者进行实例化. 单例设计模式保证了全局对象的唯一性,在许多场景中都有应用.例如Windows中多个进程或线程同时操作一个文件的时候,所有的进程或线程对于同一个文件的处理必须通过唯一的实例来进行. 2. java单例设计模式的几种实现方式 单例设计的最大特点是类的构造函数是私有的,确保了只能由类本身创建对象,而访问者无法进

Java二十三设计模式之------中介者模式

一.中介者模式(Mediator) 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用.先看看图: User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高,为了解耦,引入了Medi

Java中常见设计模式面试

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种: 策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1.请列举出在JDK中几个常用的设计模式? 单例模式用于Runtime, Calendar和其他的一些类中.工厂模式被

Java面试16|设计模式

1.单例模式: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式有以下几个要素: 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例.饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用:而懒汉式在调用取得实例方法的时候才会实例化对象. 饿汉式: public class Singleton_Simple { private static final Si