设计模式——中介者模式

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

即没有统一的管理者,需要与其他类交流时就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 {@Overridepublic 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();}
}

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/18342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++教程——const修饰指针、结构体、文件操作

const修饰指针 常量指针 指针常量 const既修饰指针&#xff0c;又修饰常量 指针与数组 结构体 通过指针访问结构体变量中的数据 结构体中const使用场景 文件操作 写文件 读文件 读取数据的方式 二进制读写文件 写文件 读文件

猿人学第二届第一题找修改位置(非答题)

第二届第一题 AES(魔改) Base64(魔改) MD5 第一题不难&#xff0c;想要得到结果直接扣代码就行&#xff0c;但是我想找找到底修改了哪个位置。 MD5( AES (now page) ) AES加密ECB-pksc7 的 key 标准是128位即 16*8(bit) &#xff0c;这里666yuanrenxue66 是15位不是标准k…

ARG DEBIAN_FRONTEND=noninteractive作用说明

使用 在Dockerfile中使用ARG指令定义变量并为其指定一个默认值。ARG指令用于在构建过程中传递变量的值。 对于DEBIAN_FRONTENDnoninteractive&#xff0c;它定义了一个名为DEBIAN_FRONTEND的变量&#xff0c;并将其默认值设置为noninteractive。在这个上下文中&#xff0c;no…

「深度学习之优化算法」(十一)鲸鱼算法

1. 鲸鱼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   鲸鱼算法(Whale Optimization Algorithm)是根据鲸鱼围捕猎物的行为而提出的算法。鲸鱼是一种群居的哺乳动物,在捕猎时它们也会相互合作对猎物进行驱赶和围捕。鲸鱼算法提出时间并不长,也是一个新兴…

TencentOS3.1安装PHP+Nginx+redis测试系统

PHP和Nginx应用统一安装在/application下。 Nginx选用了较新的版本1.25.0 官网下载安装包&#xff0c;解包。执行如下命令编译&#xff1a; ./configure --prefix/application/nginx-1.25.0 --usernginx --groupnginx --with-http_ssl_module --with-http_stub_status_modu…

Jenkins 创建一个 job , 用于单独执行脚本

目录 1.首先,在Jenkins中创建一个新的job 2.之后&#xff0c;会进入配置页面&#xff0c;在配置页面进行配置。 2.1.找到【Build Steps】在下&#xff0c;拉菜单中选择「シェルの実行」 &#xff08;Shell的运行&#xff09; 2.2.之后&#xff0c;会出现シェルスクリプト …

【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

在进行性能测试时&#xff0c;我们需要对测试结果进行监控和分析&#xff0c;以便于及时发现问题并进行优化。 Locust在内存中维护了一个时间序列数据结构&#xff0c;用于存储每个事件的统计信息。 这个数据结构允许我们在Charts标签页中查看不同时间点的性能指标&#xff0c…

pytorch LBFGS

LBFGS pytorch的LBFGS也是一个优化器 但是与一般的优化器不同 平常我们的顺序是 losscriterion(predict, gt) optim.zero_grad() loss.backward() optim.step()而LBFGS是 def closure():optim.zero_grad()loss criterion(predict, gt)loss.backward()return lossoptim.step…

小程序自定义海报

如图微信小程序生成海报自定义调整位置 //微信小程序组件 poster.wxml<view styleposition: relative;{{customStyle}};{{painterStyle}}><block wx:if"{{!use2D}}"><canvas canvas-id"photo" style"{{photoStyle}};position: absolut…

QT事件处理

设计一个闹钟&#xff0c;定时播报内容。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTimerEvent> #include <QDateTime> #include <QMessageBox> #include <QTextToSpeech> #include <QDebug> namespa…

数据结构与算法——什么是数据结构

当你决定看这篇文章&#xff0c;就意味着系统学习数据结构的开始。下面我们先来讲什么是数据结构。 数据结构&#xff0c;直白地理解&#xff0c;就是研究数据的存储方式。 我们知道&#xff0c;数据存储只有一个目的&#xff0c;即为了方便后期对数据的再利用&#xff0c;就如…

使用cuda报错的一次记录(CUDA error: out of memory)

原因&#xff1a; 由于batch_size设置过大导致的&#xff01;&#xff01;&#xff01;