中介者模式主要在于解耦,使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合。
应用场景:
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 @Override17 public void setNumber(int number, AbstractMediator am) {18 this.number = number;19 am.AaffectB();20 }21 }22 23 class LinkB extends Link {24 @Override25 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.143 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_code60 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 }