美文网首页Java 设计模式
Java设计模式 - 中介者模式

Java设计模式 - 中介者模式

作者: a57ecf3aaaf2 | 来源:发表于2019-03-17 20:09 被阅读11次

    定义

    中介者模式(Mediator),作为中介者使得两个存在耦合关系的对象互不相干,将多对多的相互作用转化为一对多的相互作用。

    实现

    定义一个中介者抽象类:

    public abstract class Mediator {
        public abstract void exec(String command);
    }
    

    再定义一个持有中介者的抽象角色类,这里以房东和租客的例子展开:

    public abstract class Role {
    
        protected Mediator mediator;
    
        public Role(Mediator mediator) {
            this.mediator = mediator;
        }
    }
    

    租客类:

    public class Renter extends Role {
    
        public Renter(Mediator mediator) {
            super(mediator);
        }
    
        public void receive() {
            System.out.println("租户收到新的可租信息");
        }
    
        public void requestRent() {
            System.out.println("租户请求租房");
        }
    }
    

    房东类:

    public class Landlord extends Role {
    
        public Landlord(Mediator mediator) {
            super(mediator);
        }
    
        public void rentOut() {
            System.out.println("房东发布出租信息");
        }
    
        public void receive() {
            System.out.println("房东收到新的求租信息");
        }
    }
    

    中介掌握了房东和租客的信息,并进行双向同步,其中介者的作用便展现了出来:

    public class OneMediator extends Mediator {
    
        private Landlord landlord;
        private Renter renter;
    
        public OneMediator() {
    
        }
    
        @Override
        public void exec(String command) {
            if (command.equals("landlord")) {
                landlord.rentOut();
                renter.receive();
            } else if (command.equals("renter")) {
                renter.requestRent();
                landlord.receive();
            }
        }
    
        public Landlord getLandlord() {
            return landlord;
        }
    
        public void setLandlord(Landlord landlord) {
            this.landlord = landlord;
        }
    
        public Renter getRenter() {
            return renter;
        }
    
        public void setRenter(Renter renter) {
            this.renter = renter;
        }
    }
    
    public class Client {
    
        public static void main(String[] args) {
            OneMediator mediator = new OneMediator();
    
            Landlord landlord = new Landlord(mediator);
            Renter renter = new Renter(mediator);
    
            mediator.setLandlord(landlord);
            mediator.setRenter(renter);
    
            mediator.exec("landlord");
            mediator.exec("renter");
        }
    }
    

    从例子中可以看出,中介者持有原本具有紧耦合的多对多关系的房东和租客,实现了两者的松耦合。通过中介者解决了这种复杂的网状关系,转而实现了以中介者为中心的星型结构,降低了系统复杂性,提高了可扩展性。

    Android 源码中的中介者模式

    public class KeyguardViewMediator extends SystemUI {
        private AlarmManager mAlarmManager;
        private AudioManager mAudioManager;
        private StatusBarManager mStatusBarManager;
        private boolean mSwitchingUser;
    
        private boolean mSystemReady;
        private boolean mBootCompleted;
    
        /** High level access to the power manager for WakeLocks */
       private PowerManager mPM;
    
       /** High level access to the window manager for dismissing keyguard animation */
        private IWindowManager mWM;
    
    
       /** TrustManager for letting it know when we change visibility */
        private TrustManager mTrustManager;
    
        /** SearchManager for determining whether or not search assistant is available */
        private SearchManager mSearchManager;
    }
    

    本文由 Fynn_ 原创,未经许可,不得转载!

    相关文章

      网友评论

        本文标题:Java设计模式 - 中介者模式

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