8.java设计模式(读书笔记)中介者模式

参考:http://blog.csdn.net/jason0539/article/details/45216585

(他的抽象中介者概念我并没有采用--不用好像也没问题,还简单一点)

---以前在做项目的时候用中介者模式切换界面 用容器addview remove 达到切换界面的功能

用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。


必需要了解中介者模式中的几个角色:

中介者类:

主要是用于两个同事类之间通信,构造方法中需要传入2个或多个需要互相通信的同事类对象。一个同事类接收消息,然后通过消息影响其他同事类

同事类:

需要互相通信的类。需要实现抽象同事类

同事类在set值的时候,同时调用中介者的影响方法从而在中介者类里面对另一个同事类set值

代码:

抽象同事类:


2个具体同事类--(当然,如果不要抽象同事类貌似也是可行的,这里抽象同事类主要是对共同2个同事类的抽象而已)




中介者类:



测试代码:


输出结果:


不要抽象同事类的写法如下:

public class A  {
public int number;
public int getNumber() {
return number;
}
public void setNumber(int number, Mediator am) {
this.number = number;
am.AaffectB();
}
public void setNumber(int number) {
this.number = number;
}
}


public class B {
public int number;
public int getNumber() {
return number;
}
public void setNumber(int number, Mediator am) {
this.number = number;
am.BaffectA();
}
public void setNumber(int number) {
this.number = number;
}
}


public class Mediator  {
A a;
B b;
public Mediator(A a, B b) {
this.a = a;
this.b = b;
}
public void AaffectB() {
int number = a.getNumber();
b.setNumber(number * 100);
}
public void BaffectA() {
int number = b.getNumber();
a.setNumber(number / 100);
}
}


public class test {
public static void main(String[] args) {
A a = new A();
B b = new B();
Mediator am = new Mediator(a, b);
System.out.println("==========通过设置A影响B==========");
a.setNumber(1000, am);
System.out.println("collA的number值为:" + a.getNumber());
System.out.println("collB的number值为A的10倍:" + b.getNumber());
System.out.println("==========通过设置B影响A==========");
b.setNumber(1000, am);
System.out.println("collB的number值为:" + b.getNumber());
System.out.println("collA的number值为B的0.1倍:" + a.getNumber());
}
}

不要抽象同事类也可以达到完全一样的效果。只是每个同事类中代码多了一些。

总的来说。中介者模式,就是抽象出来一个中介者类,这个类的构造需要保存2个同事类的引用,并且当中有

取值和设置值的方法。看看代码就理解了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值