首页 > 代码库 > java中介者模式

java中介者模式

中介者模式主要在于解耦,使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合。

应用场景:

1.当一组对象要进行沟通或者业务上的交互,但是其关系又很复杂混乱时。

2.当一个对象与其他对象要进行紧密的交互,又不想依赖于其他对象时。

3.想创造一个运行于多个类之间的对象,又不想生成新的子类。

附代码:

 1 abstract class Link { //对象父类
 2     protected int number;
 3 
 4     public int getNumber() {
 5         return number;
 6     }
 7 
 8     public void setNumber(int number) {
 9         this.number = number;
10     }
11 
12     public abstract void setNumber(int number, AbstractMediator am);
13 }
14 
15 class LinkA extends Link {
16     @Override
17     public void setNumber(int number, AbstractMediator am) {
18         this.number = number;
19         am.AaffectB();
20     }
21 }
22 
23 class LinkB extends Link {
24     @Override
25     public void setNumber(int number, AbstractMediator am) {
26         this.number = number;
27         am.BaffectA();
28     }
29 }
30 
31 abstract class AbstractMediator { //中介者父类
32     protected Link A;
33     protected Link B;
34 
35     public AbstractMediator(Link a, Link b) {
36         A = a;
37         B = b;
38     }
39     public abstract void AaffectB();
40     public abstract void BaffectA();
41 }
42 //No.1
43 class Mediator extends AbstractMediator {
44     
45     public Mediator(Link a, Link b) {
46         super(a, b);
47     }
48     
49     public void AaffectB() {
50         B.setNumber(A.getNumber() * 10);
51     }
52     
53     public void BaffectA() {
54         A.setNumber(B.getNumber() / 10);
55     }
56 }
57 
58 
59 //end_code
60 public class MediatorTest {
61     public static void main(String[] args) {
62         Link linkA = new LinkA();
63         Link linkB = new LinkB();
64     
65         AbstractMediator am = new Mediator(linkA, linkB);
66 
67         System.out.println("通过设置A影响B");
68         linkA.setNumber(20, am);
69         System.out.println("A的值为:" + linkA.getNumber());
70         System.out.println("B的值为A的10倍:" + linkB.getNumber());
71 
72         System.out.println("通过设置B影响A");
73         linkB.setNumber(200, am);
74         System.out.println("B的值为:" + linkB.getNumber());
75         System.out.println("A的值为B的0.1倍:" + linkA.getNumber());
76     }
77 }

 

java中介者模式