美文网首页
中介者模式

中介者模式

作者: 要学的东西太多了 | 来源:发表于2018-11-04 12:00 被阅读0次

    现实中,对象与对象相互影响的情况很常见,一对多相互关联的关系也很正常,由于这些对象之间耦合性太高,所以引入中介者模式,降低对象之间的耦合,将网状结构改为星型结构,所有对象对其他对象的变化通过中介者来通知。但是容易滥用中介者模式,当项目中出现多对多关系的时候,考虑下是否设计不合理。示例如下:

    public class Intermediary {
        public static void main(String[] a){
            Intermediary intermediary=new Intermediary();
            ICoder 张三 = intermediary.new Coder("张三");
            ICoder 李四 = intermediary.new Coder("李四");
            ICoder 王二 = intermediary.new Coder("王二");
            ICoder 麻子 = intermediary.new Coder("麻子");
            ICoder 二狗 = intermediary.new Coder("二狗");
            IMedia 张三的中介 = intermediary.new Media();
            张三的中介.addCoder(李四);
            张三的中介.addCoder(王二);
            张三的中介.addCoder(麻子);
            张三.setMedia(张三的中介);
    
            IMedia 李四的中介 = intermediary.new Media();
            李四的中介.addCoder(张三);
            李四的中介.addCoder(二狗);
            李四.setMedia(李四的中介);
    
            张三.modifyCode("Intermediary类,加了一个内部类");
            李四.modifyCode("Intermediary类,加了几个字段");
        }
    
        abstract class ICoder{
            private String name;
    
            public ICoder(String name) {
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
    
            abstract void modifyCode(String msg);
            abstract void getEditor(ICoder iCoder,String msg);
            abstract void setMedia(IMedia iMedia);
        }
    
        class Coder extends ICoder{
            private IMedia iMedia;
            public Coder(String name) {
                super(name);
            }
    
            public void setiMedia(IMedia iMedia) {
                this.iMedia = iMedia;
            }
    
            @Override
            public void modifyCode(String msg) {
                System.out.println(getName()+"说:我刚刚改了"+msg);
                if(iMedia!=null)
                    iMedia.notifyMsg(this,msg);
            }
    
            @Override
            void getEditor(ICoder iCoder,String msg) {
                System.out.println(iCoder.getName()+"修改了"+msg+","+getName()+"说:你又偷偷加BUG");
            }
    
            @Override
            public void setMedia(IMedia iMedia) {
                this.iMedia=iMedia;
            }
        }
    
        interface IMedia{
            void notifyMsg(ICoder iCoder,String msg);
            void addCoder(ICoder coder);
            void removeCoder(ICoder coder);
        }
    
        class Media implements IMedia{
            private List<ICoder> coders=new ArrayList<>();
    
            @Override
            public void addCoder(ICoder coder) {
                coders.add(coder);
            }
    
            @Override
            public void removeCoder(ICoder coder) {
                coders.remove(coder);
            }
    
            @Override
            public void notifyMsg(ICoder iCoder,String msg) {
                for(ICoder coder:coders){
                    coder.getEditor(iCoder,msg);
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:中介者模式

          本文链接:https://www.haomeiwen.com/subject/lhsrxqtx.html