博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中介者模式
阅读量:6691 次
发布时间:2019-06-25

本文共 2097 字,大约阅读时间需要 6 分钟。

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

应用场景:

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 }

 

转载于:https://www.cnblogs.com/amos-s/p/6536338.html

你可能感兴趣的文章
jsp与jsp之间传参数如何获取
查看>>
如何做好一名售前工程师 [理论]
查看>>
什么是语法糖?
查看>>
rabbitMQ的安装和创建用户
查看>>
Struts2笔记——第一个实例HelloWorld
查看>>
Maven安装
查看>>
2.1列表相关知识点
查看>>
OpenStack images
查看>>
xsigo systems
查看>>
ofbiz ins
查看>>
iOS动画实现改变frme和contenOffset
查看>>
DroidPilot使用第一步 - 安装
查看>>
0059-乘积问题
查看>>
2019年的第一篇随笔
查看>>
关于公网ip的一些信息(摘抄)
查看>>
5分钟弄懂Docker!
查看>>
BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
查看>>
BZOJ2223/3524:[POI2014] Couriers(主席树)
查看>>
MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-5]
查看>>
Nodejs 连接各种数据库集合例子
查看>>