设计模式(8):中介者模式
来源:互联网 发布:echo gumi动作数据 编辑:程序博客网 时间:2024/05/16 11:25
定义:
用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
中介者模式的类图:
Mediator:抽象中介者角色
ConcreteMediator:具体中介者角色
Colleague:同事角色
每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。
每个同事类的行为分为两种:
一种是同事本身的行为,比如改变对象本身的状态,处理自己的行为,这种方法叫做自发行为,与其他的同事类或中介者没有任何的依赖;
一种是必须依赖中介者才能完成的行为,
优缺点:
优点就是减少了类之间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了依赖,降低耦合性。
缺点就是中介者会膨胀的很大,而且逻辑复杂。
示例:
进销存管理:
示意图:
从这个示意图中便可以看出,三个模块是相互依赖的。
修改后的类图
加入了一个中介者作为三个模块的交流核心,每个模块之间不再相互交流,要交流就要通过中介者。
代码:
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);}/** * 中介者Mediator定义了多个private方法,起目的是处理各个对象之间的依赖关系 * 就是说把原有的一个对象要依赖多个对象的情况转移到中介者的private方法中实现 * * */class Mediator extends AbstractMediator {@Overridepublic void execute(String str, Object... objects) {if (str.equals("purchase.buy")) {// 采购电脑this.buyComputer((Integer) objects[0]);} else if (str.equals("sale.sale")) {// 销售电脑this.sellComputer((Integer) objects[0]);} else if (str.equals("sale.offsell")) {// 折价销售this.offsale();} else if (str.equals("stock.clear")) {this.clearStock();}}// 销售电脑private void sellComputer(Integer num) {if (super.stock.getStockNumber() < num) {// 库存数量不够销售super.purchase.buyComputer(num);}super.stock.decrease(num);}// 采购电脑private void buyComputer(Integer num) {int saleStatus = super.sale.getSaleStatus();if (saleStatus > 80) {// 销售情况良好System.out.println("采购IBM电脑 " + num + "台");super.stock.increase(num);} else {// 销售情况不好 折半采购int buyNum = num / 2;System.out.println("采购IBM电脑 " + buyNum + "台");}}// 折价销售private void offsale() {System.out.println("折价销售电脑 : " + stock.getStockNumber() + "台");}// 清理仓库private void clearStock() {super.sale.offSale();super.purchase.refuseBuyComputer();}}abstract class AbstractColleague {protected AbstractMediator mediator;public AbstractColleague(AbstractMediator _mediator) {this.mediator = _mediator;}}class Purchase extends AbstractColleague {public Purchase(AbstractMediator _mediator) {super(_mediator);}public void refuseBuyComputer() {System.out.println("不再采购电脑");}public void buyComputer(Integer num) {super.mediator.execute("purchase.buy", num);}}class Sale extends AbstractColleague {public Sale(AbstractMediator _mediator) {super(_mediator);}public int getSaleStatus() {Random random = new Random(System.currentTimeMillis());int saleStatus = random.nextInt(100);System.out.println("电脑销售情况为 " + saleStatus);return saleStatus;}// 销售电脑public void sellComputer(int num) {super.mediator.execute("sale.sell", num);System.out.println("销售电脑" + num + "台");}// 折价销售public void offSale() {super.mediator.equals("sale.offsell");}}class Stock extends AbstractColleague {public Stock(AbstractMediator _mediator) {super(_mediator);}// 刚开始100台电脑private static int COMPUTER_NUM = 100;// 库存降低public void decrease(Integer num) {COMPUTER_NUM -= num;System.out.println("库存数量为" + COMPUTER_NUM);}public Integer getStockNumber() {return COMPUTER_NUM;}// 库存增加public void increase(Integer num) {COMPUTER_NUM += num;System.out.println("库存数量为" + COMPUTER_NUM);}// 通知采购人员不要采购,销售人员尽快销售public void clearStock() {System.out.println("清理存货数量为: " + COMPUTER_NUM);super.mediator.execute("stock.clear");}}/** * 在场景类中增加了一个中介者,然后分别传递到三个同事类中,三个类都具有相同的特性: * 只负责处理自己的活动(行为),与自己无关的活动就丢给中介者处理,程序的运行结果是相同的 加入了中介者,设计结构清晰了很多,类之间的耦合性大大减少 * */public class client {public static void main(String[] args) {AbstractMediator mediator = new Mediator();// 采购电脑System.out.println("-----------采购电脑-----------");Purchase purchase = new Purchase(mediator);purchase.buyComputer(100);// 销售电脑System.out.println("\n----------销售电脑-----------");Sale sale = new Sale(mediator);sale.sellComputer(1);// 仓库管理System.out.println("\n----------仓库管理-----------");Stock stock = new Stock(mediator);stock.clearStock();}}
0 0
- 设计模式(8):中介者模式
- 设计模式利剑8-中介者模式
- 设计模式利剑8-中介者模式
- 设计模式8-中介者模式
- 设计模式--中介者模式(Mediator)
- 设计模式(7):中介者模式
- c++设计模式(中介者模式)
- 设计模式(24) - 中介者模式
- 设计模式:中介者模式(Mediator)
- 设计模式:中介者模式(Mediator)
- 设计模式:中介者模式(Mediator)
- 设计模式(17)------中介者模式
- 设计模式(20)-中介者模式
- 设计模式(十四)中介者模式
- 设计模式(十四)中介者模式
- [设计模式]中介者模式(Mediator)
- 设计模式(十三)--中介者模式
- 设计模式(17)-中介者模式
- linq实现随机查询
- Java回调机制解析
- C语言位运算详解
- 色相(H)饱和度(S)明度(L)与RGB的转换以及在android上的试验
- Container With Most Water
- 设计模式(8):中介者模式
- android中如何实现进入一个界面不做任何动作过10秒钟自动跳转到其他activity?
- 设计模式——结构型模式
- 数据分析师成长之路
- LVM配置
- AndroidStudio问题解决系列2—HAX is not working
- HDU 1003 Max Sum 最大连续子序列和
- UVA - 1658(网络流经典拆点方法)
- Mysql:is not allowed to connect to this MySQL server