zoukankan      html  css  js  c++  java
  • java设计模式之中介者

    中介者设计模式大家都不模式,中介也很好理解,我们生活中也会碰到,比如房产中介之类的。

    那么今天我们以房产中介和客户的例子来理解下中介者模式

    一、中介者实现

    首先,我们定义一个中介接口,他主要负责在客户之间传递消息

    public interface Mediator {
        void send(Person src,  String message);
    }

    房产租赁市场上的人,有想租房的,也有往外租房的。他们互相是不认识的,也没有对方的联系方式,所有他们只能跟中介打交道

    public abstract class Person {
        protected Mediator mediator;
    
        public Person(Mediator mediator) {
            this.mediator = mediator;
        }
    
        public abstract void send(String message);
    
        public abstract void accept(String message) ;
    }

    实际中介的实现,他有买方和卖方的所有信息,我们这里只有一个买方和卖方,实际中应该是多对多的:

    public class HouseAgency implements Mediator {
    
        private Person buyer;
    
        private Person seller;
    
        public void setBuyer(Person buyer) {
            this.buyer = buyer;
        }
    
        public void setSeller(Person seller) {
            this.seller = seller;
        }
    
        @Override
        public void send(Person src,  String message) {
            System.out.println(src + " send:"+message );
            if (src.equals(buyer)) {
                seller.accept(message);
            }else{
                buyer.accept(message);
            }
        }
    }

    真正的买方

    public class Buyer extends Person {
    
        public Buyer(HouseAgency houseAgency) {
            super(houseAgency);
        }
    
        public void send(String message) {
            mediator.send(this, message);
        }
    
        public void accept(String message) {
            System.out.println(this.toString() + " accept:" + message);
        }
    
        @Override
        public String toString() {
            return "Buyer";
        }
    }

    卖方:

    public class Seller extends Person {
        public Seller(HouseAgency houseAgency) {
            super(houseAgency);
        }
    
        public void send(String message) {
            mediator.send(this, message);
        }
    
        public void accept(String message) {
            System.out.println(this.toString() + " accept:" + message);
        }
    
        @Override
        public String toString() {
            return "Seller";
        }
    }

    买方和卖方通过中介者联系。所以他们都有中介的信息。

    我们实现一次交流,卖方和买方都没有对方的信息,但他们通过中介实现了成功交易。

    public class TestMain {
        public static void main(String[] args) {
            HouseAgency mediator = new HouseAgency();
            Buyer buyer = new Buyer(mediator);
            Seller seller = new Seller(mediator);
            mediator.setBuyer(buyer);
            mediator.setSeller(seller);
            buyer.send("I like this house!");
            seller.send("I can rent it to you!");
        }
    }

    输出:

    Buyer send:I like this house!
    Seller accept:I like this house!
    Seller send:I can rent it to you!
    Buyer accept:I can rent it to you!

    二、中介者应用场景

    中介者在商品或者服务的交易市场最常出现,也叫经纪人。

    因为大部分情况下,买东西的人不知道谁可以卖东西给他,卖东西的人不清楚谁需要我的商品。

    这个时候就需要一个中介存在,这么理解那么JD、TB其实都算是中介。

    1. 何时使用

    • 多个类相互耦合,形成网状结构时

    2. 方法

    • 将网状结构分离为星型结构

    3. 优点

    • 减少类间依赖,降低了耦合
    • 符合迪米特原则

    4. 缺点

    • 中介者会膨胀的很大,而且逻辑复杂

    5. 使用场景

    • 系统中对象之间存在比较复杂的引用关系
    • 想通过一个中间类来封装多个类的行为,而又不想生成太多的子类
  • 相关阅读:
    你不知道的JavaScript(上)作用域与闭包
    csu 1982: 小M的移动硬盘
    csu 1985: 驱R符
    csu 1987: 绚丽的手链
    2017ACM/ICPC广西邀请赛 1007 Duizi and Shunzi
    2017ACM/ICPC广西邀请赛 1005 CS Course
    2017ACM/ICPC广西邀请赛 1004 Covering
    hdu 1209 Clock
    trac中wiki直接显示任务代码
    phpcms中action值的含义
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15250546.html
Copyright © 2011-2022 走看看