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 }
  • 相关阅读:
    使用PHP获取用户客户端真实IP的解决方案
    PHP中使用mkdir创建多级目录的方法
    javascript中将字符串转换为json格式的三种方法
    Codeigniter处理用户登录验证后URL跳转
    PHP正则表达式匹配URL中的域名
    开源项目列表
    PG JDBC COPY感谢原作者
    if中return的用法
    读数据库查询的 ResultSet时java.sql.SQLException: 流已被关闭
    一篇讲JAVA JDBC的好文章
  • 原文地址:https://www.cnblogs.com/amos-s/p/6536338.html
Copyright © 2011-2022 走看看