zoukankan      html  css  js  c++  java
  • 中介者模式

    中介者模式定义:
    Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects
    from referring to each other explicity, and it lets you vary their interaction independently
    用一个中介对象封装一系列的对象交互,中介者使各对对象不需要显示相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    一般遇到这种多个对象相互依赖的关系是,可以考虑使用中介者模式

    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{
        public void execute(String str,Object... object){
            if(str.equals("purchase.buy")){
                this.buyComputer((Integer)object[0]);
            }else if(str.equals("sale.sell")){
                this.sellComputer((Integer)objects[0]);
            }else if(str.equals(stock.clear)){
                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{
                int buyComputer=number/2;
                System.out.println("采购IBM电脑:"+buyComputer+"台");
        }
        
        private void sellComputer(int number){
            if(super.stock.getStockNumber()<number){
                super.purchase.buyIBMComputer(number);
            }
            super.stock.decrease(number);
        }
        
        private void offSell(){
            System.out.println("折价销售IBM电脑"+stock.getStockNubmer()+"台");
        }
        
        private void clearStock(){
            super.sale.offSale();
            super.purchase.refuseBuyIBM();
        }
    }
    
    //抽象同事类
    public abstract class AbstractColleague{
        protected AbstractMediator mediator;
        public AbstractColleague(AbstractMediator _mediator){
            this.mediator=_mediator;
        }
    }
    
    public class Purchase extends AbstractColleague{
        public Purchase(AbstractMediator _mediator){
            super(_mediator);
        }
        public void buyIBMComputer(int number){
            super.mediator.execute("purchase.buy",number):
        }
        
        public void refuseBuyIBM(){
            System.out.println("不再采购IBM电脑");
        }    
    }
    
    public class Stock extends AbstractColleague{
        public Stock(AbstractMediator _mediator){
            super(_mediator);
        }
        private static int COMPUTER_NUMBER=100;
        public void increase(int number){
            COMPUTER_NUMBER=COMPUTER_NUMBER+number;
            System.out.println("库存数量为:"+COMPUTER_NUMBER);
        }
        public void decrease(int number){
            COMPUTER_NUMBER=COMPUTER_NUMBER-number;
            System.out.println("库存数量为:"+COMPUTER_NUMBER);
        }
        public int getStockNumber(){
            return COMPUTER_NUMBER;    
        }
        public void clearStock(){
            super.mediator.execute("stock.clear");
        }
    }
    
    public class Sale extends AbstractColleague{
        public Sale(AbstractMediator _mediator){
            super(_mediator);
        }
        public void sellIBMComputer(int number){
            super.mediator.execute("sale.sell",number);
            System.out.println("销售IBM电脑"+number+"台"):
        }
        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("sale.offSell");
        }
    }

    在如下情况下可以尝试使用中介者模式:
    1.N个对象产生了相互依赖关系
    2.多个对象有依赖关系,但是依赖行为尚不确定或者有发生改变的可能,在这种情况下一般建议采用中介者模式,降低变更引起的风险扩散
    3.产品开发。一个明显的例子就是MVC框架,把中介者模式应用到产品中,可以提升产品的性能和扩展性,但是对于项目开发就未必,因为
    项目是以交付投产为目标,而产品则是以稳定,高效,扩展为宗旨

  • 相关阅读:
    Omi新成员omi-router正式发布
    Omi架构与React Fiber
    Omi框架Store体系的前世今生
    Omi v1.0震撼发布
    omi-cli新版发布-升级webpack2和支持sass生成组件局部CSS
    Omi应用md2site-0.5.0发布-支持动态markdown拉取解析
    Omi应用md2site发布-markdown转网站利器
    AlloyTouch之无限循环select插件
    Omi教程-插件体系
    AlloyTouch之select选择插件
  • 原文地址:https://www.cnblogs.com/liaojie970/p/5485050.html
Copyright © 2011-2022 走看看