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("我是房东:有单间出租");
    
    
        }
    }
  • 相关阅读:
    前端布局方式汇总及概念浅析
    html中map area 热区自适应的原生js实现方案
    css3实现背景颜色渐变,文字颜色渐变,边框颜色渐变
    css3动画的性能优化_针对移动端卡顿问题
    分享几个很实用的CSS技巧对前端技术很有帮助
    为什么是link-visited-hover-active原理这样的特殊
    HTML中<base>标签的正确使用
    面试WEB前端如何才能通过?
    Java连载48-final关键字
    Python连载48-正则表达式(中)
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10943629.html
Copyright © 2011-2022 走看看