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

    中介者模式:为了减小各个对象的直接接触,引入中介对象来对各个对象之间的复杂操作进行处理。

      就像卖方中介一样的。帮助维护租客和房东之间的沟通。

    示例说明:房屋买卖中介。卖房者和买房者都认识中介,但是买房者和卖房者是不认识的。

    定义一个中介(单例实现)

    package com.zpj.designMode.MediatorPattern;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Mediator {
        List<Operator> opers = new ArrayList<Operator>();
    
        public void addOperators(Operator oper) {
            opers.add(oper);
        }
    
        private static Mediator mediator = new Mediator();
    
        private Mediator() {
        }
    
        public static Mediator getInstance() {
            return mediator;
        }
    
        public void sell(Operator oper, int price) {
            System.out.println("---------出售:" + price + "$");
            for (int i = 0; i < opers.size(); i++) {
                Operator op = opers.get(i);
                if (oper != op) {
                    if (op.topPrice > price) {
                        op.buy();
                    }
                }
            }
    
        }
    
    }

    定义一个炒房者抽象类Operator

    package com.zpj.designMode.MediatorPattern;
    
    public abstract class Operator {
        protected Mediator mediator = Mediator.getInstance();
        protected int topPrice = 0;
    
        public Operator(int topPrice) {
            super();
            this.topPrice = topPrice;
        }
    
        public abstract void sell(int price);
    
        public abstract void buy();
    
    }

    添加两个炒房者实例:

    package com.zpj.designMode.MediatorPattern;
    
    public class Operator01 extends Operator {
    
        public Operator01(int basePrice) {
            super(basePrice);
        }
    
        @Override
        public void sell(int price) {
            mediator.sell(this, price);
        }
    
        @Override
        public void buy() {
            System.out.println("Operator01-----------我买!");
        }
    
    }
    
    
    
    package com.zpj.designMode.MediatorPattern;
    
    public class Operator02 extends Operator {
    
        public Operator02(int basePrice) {
            super(basePrice);
        }
    
        @Override
        public void sell(int price) {
            mediator.sell(this,price);
        }
    
        @Override
        public void buy() {
            System.out.println("Operator02-----------我买!");
        }
    
    }

    使用示例:

    package com.zpj.designMode.MediatorPattern;
    
    import org.junit.Test;
    
    public class TestUnit {
    
        @Test
        public void test01() {
            Mediator mediator = Mediator.getInstance();
    
            Operator op01 = new Operator01(12);
            Operator op02 = new Operator02(20);
    
            mediator.addOperators(op01);
            mediator.addOperators(op02);
    
            // 02卖方
            op02.sell(1);
    
        }
    }

    需要注意的是,operator可以互相不认识,但是Mediator 和每个operator之间是认识的。

    ----------------------

  • 相关阅读:
    TCP/IP,HTTP,HTTPS,WEBSocket协议
    mysql优化
    PHP基础算法
    php----函数大全
    面试题总结101-)
    扫描一个目录下的所有文件,根据这些文件的创建日期生成一个文件夹,然后把这些文件移入这个文件夹下面
    对执行文件下的文件按照时间
    [合集]解决Python报错:local variable 'xxx' referenced before assignment
    python 函数私有方法
    去哪儿面试题- 一组描述由人组成的网络的测试用例校验是否联通
  • 原文地址:https://www.cnblogs.com/PerkinsZhu/p/5843186.html
Copyright © 2011-2022 走看看