zoukankan      html  css  js  c++  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 }
  • 相关阅读:
    [整理] jQuery插件开发
    windows2008r2安装笔记
    javascript 中 typeof 和 instanceof 的区别
    mysql 复制表结构和表数据
    一个例子明白 javascript 中 for 与 for in 的区别
    实现自己的框架
    Jenkins 前端项目构建报错:Vue packages version mismatch
    linux Auditd 审计工具安装报错
    linux定时压缩日志文件脚本
    Robot Framework 3.1.2 执行测试用例报错
  • 原文地址:https://www.cnblogs.com/amos-s/p/6536338.html
Copyright © 2011-2022 走看看