中介者模式(行为类)
来源:互联网 发布:大脚插件mac更新 编辑:程序博客网 时间:2024/06/13 23:21
UML
- Mediator角色: 抽象中介者角色定义统一的接口,用于各同事角色之间通信
- ConcreteMediator角色: 具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖各个同事角色
- Colleague 角色: 每个同事角色都知道中介者角色,而且与其他同事角色通信的时候,一定要通过中介者角色协作。每个同事角色分为两种,一种是同事本身的行为,比如改变自身的状态,处理自己的行为等,叫做自发行为 , 第二种是必须依赖中介者才能完成的行为,叫做依赖方法
介绍
- 意图: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
- 优点: 1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。
- 缺点: 中介者过于庞大
例子
UML
介绍
销售,仓库管理,采购之间的关系处理
代码
AbstractMediator(Mediator)
public abstract class AbstractMediator { protected Purchase purchase ; protected Stock stock ; protected Sale sale ; public abstract void execute(String str , Object...objects); public AbstractMediator(){ this.purchase = new Purchase(this) ; this.sale = new Sale(this) ; this.stock = new Stock(this) ; }}
Mediator (ConcreteMediator)
public class Mediator extends AbstractMediator{ @Override public void execute(String str, Object... objects) { if("purchase.buy".equals(str)){ this.buyComputer((Integer)objects[0]) ; }else if("sale.sell".equals(str)){ this.sellComputer((Integer)objects[0]) ; }else if("sale.offsell".equals(str)){ this.offSell() ; }else if("stock.clear".equals(str)){ this.clearStock() ; } } private void clearStock() { super.sale.offSale() ; super.purchase.refuseBuyIBM(); } private void offSell() { System.out.println("折扣销售IBM电脑" + super.stock.getStockNumber() + "台"); } private void sellComputer(Integer number) { if(super.stock.getStockNumber() < number){ super.purchase.buyIBMcomputer(number) ; } super.stock.decrease(number) ; } private void buyComputer(Integer number) { int saleStatus = super.sale.getSaleStatus() ; if(saleStatus > 50){ System.out.println("采购电脑" + number + "台"); super.stock.increase(number) ; }else{ int buyNumber = number/2 ; super.stock.increase(buyNumber) ; System.out.println("采购电脑" + buyNumber + "台"); } }}
AbstractColleague
public abstract class AbstractColleague { protected AbstractMediator mediator ; public AbstractColleague(AbstractMediator mediator){ this.mediator = mediator ; }}
Purchase(Colleague)
public class Purchase extends AbstractColleague{ public Purchase(AbstractMediator mediator) { super(mediator); } public void refuseBuyIBM() { System.out.println("不在采购IBM电脑"); } public void buyIBMcomputer(Integer number) { super.mediator.execute("purchase.buy",number); }}
Sale(Colleague)
import java.util.Random;public class Sale extends AbstractColleague{ public Sale(AbstractMediator abstractMediator) { super(abstractMediator) ; } public void offSale() { super.mediator.execute("sale.offsell") ; } public int getSaleStatus() { Random rand = new Random(System.currentTimeMillis()) ; int status = rand.nextInt(100) ; System.out.println("IBM电脑的销售情况为" + status); return status; } public void sellIBMComputer(int number){ super.mediator.execute("sale.sell", number); System.out.println("销售人员销售电脑" + number + "台"); }}
Stock(Colleague)
public class Stock extends AbstractColleague{ private static int CURRENT_NUMBER = 100 ; public Stock(AbstractMediator abstractMediator) { super(abstractMediator) ; } public int getStockNumber() { return CURRENT_NUMBER ; } public void increase(int number) { CURRENT_NUMBER = CURRENT_NUMBER + number ; } public void decrease(Integer number) { CURRENT_NUMBER = CURRENT_NUMBER - number ; } public void clearStock(){ System.out.println("清理库存数量为:" + CURRENT_NUMBER); mediator.execute("stock.clear"); }}
Client(client)
public class Client { public static void main(String[] args) { 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(50); System.out.println("==========库房管理人员清理库存================="); Stock stock = new Stock(mediator) ; stock.clearStock(); }}
参考
<<设计模式之禅>>
0 0
- 中介者模式(行为类)
- 行为模式-中介者模式
- 行为模式-中介者模式
- 中介者模式 - 行为模式
- 中介者模式(行为型)
- 设计模式-行为-中介者
- 设计模式--中介者模式(行为类模式)
- 行为类模式—中介者模式(7)
- 行为类模式-中介者模式(13)
- 设计模式--行为型--中介者模式
- 行为型模式之中介者模式
- 中介者模式-对象行为模式
- 行为型模式1:中介者模式
- 行为设计模式---中介者模式(Mediator)
- 行为型模式-Mediator ( 中介者模式 )
- 行为型模式-中介者模式
- 行为型设计模式-中介者模式
- 中介者模式(行为模式)
- 局域网内,ping IP可以ping的通,ping主机名ping不通解决办法
- linux部署web项目问题
- SAP S/4 HANA的SMARTFORMS如何切换到非word编辑器
- easyUI 获取tabs
- 网页设计% jQuery 分享真的牛的响应式灯箱特效FANCYBOX
- 中介者模式(行为类)
- oracle 某个字段重复的记录,选其中随便一条。
- 欢迎使用CSDN-markdown编辑器
- String及StringBuffer、StringBuilder解析
- VirtualBox 共享文件夹设置为开机自动挂载
- Javascript私有性
- Java 枚举类型基础案例
- mac 终端添加颜色
- Map接口及其重要实现类的用法