设计模式——中介者模式

中介者模式(非中介者场景)

即没有统一的管理者,需要与其他类交流时就new一个

场景

  1. 三个类:采购、销售、库存
  2. 采购商品时,联系销售看看的销售情况好不好,再决定采购的数量
  3. 销售负责反馈销售情况,还有折扣处理
  4. 库存负责管理库存数量,库存压力大时通知采购人员不要采购、销售人员尽快销售等

非中介者场景

采购类

/**
 * 采购管理
 */
public class Purchase {
	// 采购IBM电脑
	public void butIBMComputer(int number){
		// 访问库存
		Stock stock = new Stock();
		// 访问销售
		Sale sale = new Sale();
		// 电脑销售情况
		int saleStatus = sale.getSaleStatus();
		// 销售情况良好
		if (saleStatus > 80) {
			System.out.println("采购IBM电脑:" + number + "台");
			stock.increase(number);
		} else {
			// 销售情况不好
			int buyNumber = number / 2;
			System.out.println("采购IBM电脑:" + buyNumber + "台");
		}
	}

	// 不再采购IBM电脑
	public void refuseBuyIBM(){
		System.out.println("不再采购IBM电脑");
	}
}

销售类

/**
 * 销售类
 */
public class Sale {
	// 销售IBM电脑
	public void sellIBMComputer(int number) {
		// 访问库存
		Stock stock = new Stock();
		// 访问采购
		Purchase purchase = new Purchase();
		// 库存不足
		if (stock.getStockNumber() < number) {
			purchase.butIBMComputer(number);
		}
		System.out.println("销售了" + number + "台IBM电脑");
		stock.decrease(number);
	}

	// 反馈销售情况,0~100之间的变化,0代表根本就没人买,100代表非常畅销
	public int getSaleStatus() {
		Random rand = new Random(System.currentTimeMillis());
		int saleStatus = rand.nextInt(100);
		System.out.println("IBM销售电脑情况为;" + saleStatus);
		return saleStatus;
	}

	// 折扣处理
	public void offSale(){
		// 库房有多少卖多少
		Stock stock = new Stock();
		System.out.println("折扣销售IBM电脑" + stock.getStockNumber() + "台");
	}
}

库存类

/**
 * 库存类
 */
public class Stock {
	private static int COMPUTER_NUMBER = 100;

	// 库存增加
	public void increase(int number){
		COMPUTER_NUMBER += number;
		System.out.println("库存数量为:" + COMPUTER_NUMBER);
	}

	// 库存减少
	public void decrease(int number){
		COMPUTER_NUMBER -= number;
		System.out.println("库存数量为:" + COMPUTER_NUMBER);
	}

	// 获取库存数量
	public int getStockNumber(){
		return COMPUTER_NUMBER;
	}

	// 库存压力大了,就要通知采购人员不要采购,销售人员尽快销售
	public void clearStock(){
		Purchase purchase = new Purchase();
		Sale sale = new Sale();
		System.out.println("清理存贷数量为:" + COMPUTER_NUMBER);
		// 要求折价销售
		sale.offSale();
		// 要求采购人员不要采购
		purchase.refuseBuyIBM();
	}
}

入口类

public class NotMediatorMain {
	public static void main(String[] args) {
		// 采购人员采购电脑
		System.out.println("-----采购人员采购电脑-----");
		Purchase purchase = new Purchase();
		purchase.butIBMComputer(100);
		System.out.println("-----销售人员销售电脑-----");
		Sale sale = new Sale();
		sale.sellIBMComputer(1);
		System.out.println("-----库存管理人员清库处理-----");
		Stock stock = new Stock();
		stock.clearStock();
	}
}

中介者模式(中介者场景)

每个类只负责本职工作,不属于本类的范畴都交给中介。
简而言之,就是类的方法中存在需要new的、不属于本类管理范畴的,都交给中介去做,当然,这个中介是牛马

场景

  1. 三个类:采购、销售、库存
  2. 采购商品时,联系销售看看的销售情况好不好,再决定采购的数量
  3. 销售负责反馈销售情况,还有折扣处理
  4. 库存负责管理库存数量,库存压力大时通知采购人员不要采购、销售人员尽快销售等
    在这里插入图片描述

中介者场景

抽象中介者类

/**
 * 抽象中介者
 */
public abstract class AbstractMediator {
	protected Purchase purchase;
	protected Sale sale;
	protected Stock stock;

	// 构造函数
	public AbstractMediator(){
		purchase = new Purchase(this);
		sale = new Sale(this);
		stock = new Stock(this);
	}

	// 中介者最重要的方法就是事件方法,负责处理多个对象之间的关系
	public abstract void execute(String str,Object... objects);
}

中介者实现类

public class Mediator extends AbstractMediator {
	@Override
	public void execute(String str, Object... objects) {
		if (OptionConstant.PURCHASE_BUY.equals(str)) {
			this.buyComputer((Integer) objects[0]);
		} else if(OptionConstant.SALE_SELL.equals(str)) {
			this.sellComputer((Integer) objects[0]);
		} else if(OptionConstant.SALE_OFF_SELL.equals(str)){
			this.offSell();
		} else if (OptionConstant.STOCK_CLEAR.equals(str)){
			this.clearStock();
		}
	}

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

	// 销售电脑
	private void sellComputer(int number) {
		// 库存不足,要采购
		if (super.stock.getStockNumber() < number) {
			super.purchase.butIBMComputer(number);
		}
		super.stock.decrease(number);
	}

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

	// 清仓处理
	private void clearStock(){
		// 要求清仓销售
		super.sale.offSale();
		// 要求采购人员不要采购
		super.purchase.refuseBuyIBM();
	}
}

静态资源类OptionConstant

/**
 * 静态资源类,描述同事类中的行为
 */
public class OptionConstant {
	public static final String PURCHASE_BUY = "purchase.buy";
	public static final String SALE_SELL = "sale.sell";
	public static final String SALE_OFF_SELL = "sale.offSell";
	public static final String STOCK_CLEAR = "stock.clear";
}

抽象同事类

/**
 * 抽象同事类
 */
public abstract class AbstractColleague {
	protected AbstractMediator mediator;
	public AbstractColleague(AbstractMediator mediator){
		this.mediator = mediator;
	}

	protected AbstractColleague() {
	}
}

采购类(修改后)

/**
 * 采购管理
 */
public class Purchase extends AbstractColleague {
	public Purchase(AbstractMediator mediator) {
		super(mediator);
	}
	public Purchase(){

	}
	// 采购IBM电脑
	public void butIBMComputer(int number){
		super.mediator.execute(OptionConstant.PURCHASE_BUY,number);
	}
	// 不再采购IBM电脑
	public void refuseBuyIBM(){
		System.out.println("不再采购IBM电脑");
	}
}

销售类(修改后)

/**
 * 销售类
 */
public class Sale extends AbstractColleague {
	public Sale(AbstractMediator mediator) {
		super(mediator);
	}
	public Sale(){}
	// 销售IBM电脑
	public void sellIBMComputer(int number) {
		super.mediator.execute(OptionConstant.SALE_SELL, number);
		System.out.println("销售了" + number + "台IBM电脑");
	}
	// 反馈销售情况,0~100之间的变化,0代表根本就没人买,100代表非常畅销
	public int getSaleStatus() {
		Random rand = new Random(System.currentTimeMillis());
		int saleStatus = rand.nextInt(100);
		System.out.println("IBM销售电脑情况为;" + saleStatus);
		return saleStatus;
	}
	// 折扣处理
	public void offSale(){
		super.mediator.execute(OptionConstant.SALE_OFF_SELL);
	}
}

库存类(修改后)

/**
 * 库存类
 */
public class Stock extends AbstractColleague {
	private static int COMPUTER_NUMBER = 100;
	public Stock(AbstractMediator mediator) {
		super(mediator);
	}
	public Stock(){}
	// 库存增加
	public void increase(int number){
		COMPUTER_NUMBER += number;
		System.out.println("库存数量为:" + COMPUTER_NUMBER);
	}
	// 库存减少
	public void decrease(int number){
		COMPUTER_NUMBER -= number;
		System.out.println("库存数量为:" + COMPUTER_NUMBER);
	}
	// 获取库存数量
	public int getStockNumber(){
		return COMPUTER_NUMBER;
	}

	// 库存压力大了,就要通知采购人员不要采购,销售人员尽快销售
	public void clearStock(){
		System.out.println("清理存贷数量为:" + COMPUTER_NUMBER);
		super.mediator.execute(OptionConstant.STOCK_CLEAR);
	}
}

入口类

public class MediatorMain {
	public static void main(String[] args) {
		notMediator();
		mediator();
	}

	// 中介者场景
	public static void mediator() {
		AbstractMediator mediator = new Mediator();
		System.out.println("-----采购人员采购电脑-----");
		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();

	}

	// 非中介者场景
	public static void notMediator() {
		// 采购人员采购电脑
		System.out.println("-----采购人员采购电脑-----");
		Purchase purchase = new Purchase();
		purchase.buyIBMComputer(100);
		System.out.println("-----销售人员销售电脑-----");
		Sale sale = new Sale();
		sale.sellIBMComputer(1);
		System.out.println("-----库存管理人员清库处理-----");
		Stock stock = new Stock();
		stock.clearStock();
	}
}

结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加把劲骑士RideOn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值