中介者模式

/**
 * 中介者模式是将相互作用的紧耦合的类通过中介者类管理俩个类的相互作用
 * 对俩个本应相互依赖的类解耦合,从而达到松耦合的目的
 * 本例中使用俩个相互作用的数类Link作为示例
 * LinkA与LinkB的num属性在进行赋值的时候相互影响
 * 若使用方法实现相互作用时,俩个类相互依赖,
 * 使用中介者设计模式如下例
 * 
 * 创建抽象的中介者类,处理相互作用的LinkA和LinkB
 * @author 
 * @version 0.1
 */
public abstract class Mediator {

    protected Link linkA;
    protected Link linkB;

    public Mediator(Link a,Link b){
        linkA = a;
        linkB = b;
    }
    
    //创建相互影响的方法
    public abstract void AaffactB();
    public abstract void BaffactA();
}


/**
 * 继承抽象的中介者类,重写抽象方法
 * @author 
 * @version 0.1
 */
public class MediatorImpl extends Mediator {

    public MediatorImpl(LinkA a,LinkB b){
        super(a,b);
    }

    @Override
    public void AaffactB() {
        linkB.setNum((int) (linkA.getNum() * 0.1));
    }

    @Override
    public void BaffactA() {
        linkA.setNum(linkB.getNum() * 10);
    }
}

/**
 * @author 
 * @version 0.1
 */
public abstract class Link {
    protected int num;

    public abstract void setNum(int num,Mediator mediator);

    public void setNum(int num){
        this.num = num;
    }
    public int getNum(){
        return num;
    }

/**
 * @author 
 * @version 0.1
 */
public class LinkA extends Link {
    @Override
    public void setNum(int num, Mediator mediator) {
        this.num = num;
        mediator.AaffactB();
    }
}

/**
 * @author 
 * @version 0.1
 */
public class LinkB extends Link {
    @Override
    public void setNum(int num, Mediator mediator) {
        this.num = num;
        mediator.BaffactA();
    }
}

/**
 * @author 
 * @version 0.1
 */
public class Test {
    public static void main(String[] args) {
        LinkA a = new LinkA();
        LinkB b = new LinkB();

        Mediator mediator = new MediatorImpl(a,b);

        a.setNum(100,mediator);
        System.out.println(a.getNum());
        System.out.println(b.getNum());

        b.setNum(20,mediator);
        System.out.println(a.getNum());
        System.out.println(b.getNum());
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值