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

    /**
     * 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介模式后,普通对象之间的交流就通过中介来进行,避免了相互进行依赖
     * 模式特点:一个中介接口和其实现类,该实现类拥有所有的普通对象的引用
     *        每个普通对象都引用一个中介对象
     *
     */
    //中介接口
    public interface IAgent {
        //登记用户
        void register(Pseron pseron);
    
        /**
         * 传递消息
         * @param message 消息内容
         * @param from 消息来源的用户名,如房东还是租户
         */
        void forward(String message,String from);
    }
    //房屋中介
    public class HouseAgent implements IAgent {
        private List<Pseron> list=new ArrayList<>(); //所有的用户
    
        @Override
        public void register(Pseron pseron) {
            if(!list.contains(pseron)){
                list.add(pseron);
                pseron.linkAgent(this);
            }
        }
    
        @Override
        public void forward(String message,String fromName) {
            for (Pseron pseron : list) {
                if(!pseron.name.equals(fromName)){ //传递消息给其他人
                    pseron.receive(message);
                }
            }
        }
    }
    //用户,拥有发送消息和接收消息,以及绑定中介的方法
    public abstract  class Pseron {
        protected String name;
        abstract void send(String message);
        abstract void receive(String message);
        abstract void linkAgent(IAgent agent);
    
    }
    //房东
    public class HouseOwer extends Pseron {
        private IAgent agent;
    
    
        public HouseOwer(String name) {
            this.name = name;
        }
    
        @Override
        void send(String message) {
            agent.forward(message,this.name);
        }
    
        @Override
        void receive(String message) {
            System.out.println(message);
            System.out.println("我是房东:我有房出租");
        }
        //绑定中介对象
        @Override
        void linkAgent(IAgent agent) {
            this.agent=agent;
        }
    }
    //租客
    public class Renter extends Pseron {
        private IAgent agent;
    
    
        public Renter(String name) {
            this.name = name;
        }
    
        @Override
        void send(String message) {
            agent.forward(message,this.name);
        }
    
        @Override
        void receive(String message) {
            System.out.println(message);
            System.out.println("我是房客,我要租房");
        }
        //绑定中介对象
        @Override
        void linkAgent(IAgent agent) {
            this.agent=agent;
        }
    }
    public class Test {
        public static void main(String[] args) {
            HouseOwer houseOwer = new HouseOwer("房东");//房东
            Renter renter = new Renter("租客");//租客
            HouseAgent houseAgent = new HouseAgent();
            houseAgent.register(houseOwer);
            houseAgent.register(renter);
            renter.send("我是房客:请问谁有房子出租");
            houseOwer.send("我是房东:有单间出租");
    
    
        }
    }
  • 相关阅读:
    人脸识别(Unseen Domains)
    人脸识别(Unseen Domains)
    人脸聚类
    人脸聚类
    人脸聚类
    人脸检测和识别以及检测中loss学习
    Embedding-based Retrieval in Facebook Search
    Spring Cloud Alibaba(1)---入门篇
    2020Android面经,历时一个半月,斩获3个大厂offer
    【算法总结】递归和非递归实现二叉树的先序,中序,后序遍历
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10943629.html
Copyright © 2011-2022 走看看