PerKins Zhu

Le vent se lève,il faut tenter de vivre.

导航

设计模式—中介者模式

Posted on 2016-09-05 18:04  PerKins.Zhu  阅读(241)  评论(0编辑  收藏  举报

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

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

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

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

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之间是认识的。

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