美文网首页
中介者模式

中介者模式

作者: 要学的东西太多了 | 来源:发表于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