中介者模式主要在于解耦,使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合。
应用场景:
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 }
原文:http://www.cnblogs.com/amos-s/p/6536338.html