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

    使用频率:★★★☆☆

    一、什么是中介者模式

    对象之间通过中介者对象进行交互,而不是直接交互;

    二、补充说明

    对紧密关联的各个对象解耦;

    典型例子:QQ群,聊天室;

    三、角色

    抽象中介者

    具体中介者

    抽象对象

    具体对象

    四、例子,JAVA实现

    例子说明,一个网络聊天室

    抽象中介者

    package com.pichen.dp.behavioralpattern.mediator;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public abstract class Mediator {
    
        protected List<User> userList;
        public Mediator() {
            userList = new ArrayList<User>();
        }
        public void addUser(User user){
            user.setMediator(this);
            this.userList.add(user);
        }
        
        public abstract void operation(User user, String msg);
    }

    具体中介者

    package com.pichen.dp.behavioralpattern.mediator;
    public class ChatRoomMediator extends Mediator {
    
        @Override
        public void operation(User user, String msg) {
            System.out.println(user.getName() + "send a msg : " + msg);
            for(User userTmp : this.userList){
                userTmp.getMessage(msg);
            }
        }
    }

    抽象对象

    package com.pichen.dp.behavioralpattern.mediator;
    
    public abstract class User {
        protected Mediator mediator;
        
        protected String name;
        
        public User(String name) {
            this.name = name;
        }
        
        protected void setMediator(Mediator mediator){
            this.mediator = mediator;
        }
        protected abstract void sendMessage(String msg);
    
        protected abstract void getMessage(String msg);
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    具体对象

    package com.pichen.dp.behavioralpattern.mediator;
    public class CommonUser extends User{
    
        public CommonUser(String name) {
            super(name);
        }
        @Override
        protected void sendMessage(String msg) {
            this.mediator.operation(this, msg);
        }
    
        @Override
        protected void getMessage(String msg) {
            System.out.println(this.getName() +  " get msg:"+msg);
        }
    
        
    }
    package com.pichen.dp.behavioralpattern.mediator;
    public class VIPUser extends User{
        public VIPUser(String name) {
            super(name);
        }
    
        @Override
        protected void sendMessage(String msg) {
            this.mediator.operation(this, msg);
        }
    
        @Override
        protected void getMessage(String msg) {
            System.out.println(this.getName() + " get msg:"+msg);
        }
    
    }

    客户端

    package com.pichen.dp.behavioralpattern.mediator;
    public class Main {
    
        public static void main(String[] args) {
            CommonUser user1 = new CommonUser("小王");
            CommonUser user2 = new CommonUser("小陈");
            VIPUser vipUser = new VIPUser("小张");
            
            Mediator chatRoom = new ChatRoomMediator();
            chatRoom.addUser(user1);
            chatRoom.addUser(user2);
            chatRoom.addUser(vipUser);
    
            user2.sendMessage("hello everybody~");
            
        }
    }

    执行结果

    小陈send a msg : hello everybody~
    小王 get msg:hello everybody~
    小陈 get msg:hello everybody~
    小张 get msg:hello everybody~
  • 相关阅读:
    FW 构建OpenStack的高可用性(HA,High Availability)
    nodeJS进程管理器pm2
    JS构造函数中 this 和 return
    js中通过Object.prototype.toString方法----精确判断对象的类型
    jpeg和jpg的区别是什么
    Http协议中Cookie详细介绍
    http协议与内容压缩
    设置TextView文字居中
    矩阵的等价,相似,合同
    “读者-写者问题”的写者优先算法实现
  • 原文地址:https://www.cnblogs.com/chenpi/p/5222152.html
Copyright © 2011-2022 走看看