设计模式16---中介者模式

国家之间关系复杂,但是有了联合国了以后,大家都到联合国上解决问题,这就是中介者。

1.college1 和college2之间是不可见的,也就是不会直接通信

2.ConcreateMedia 和各College之间是直接相关的。

这样college1 和college2之间的交流可以通过ConcreateMedia来实现。

package com.jayfulmath.designpattern.agency;

public abstract class UnitedNation {
    
    public abstract void Declare(String message,Country college);
}
package com.jayfulmath.designpattern.agency;

public class UNSC extends UnitedNation {

    public USA usa;
    public Iraq iraq;
    
    
    @Override
    public void Declare(String message, Country college) {
        if(college == usa)
        {
            iraq.GetMessage(message);
        }
        else if(college == iraq)
        {
            usa.GetMessage(message);            
        }
    }

}
public abstract class Country {
    UnitedNation unitedNation;
    
    public Country(UnitedNation mediator)
    {
        this.unitedNation = mediator;
        
    }
}
package com.jayfulmath.designpattern.agency;

public class Iraq extends Country {

    public Iraq(UnitedNation mediator) {
        super(mediator);
        
    }

    public void Declare(String message)
    {
        this.unitedNation.Declare(message, this);
    }
    
    public void GetMessage(String message)
    {
        System.out.println("Iraq get message:"+message);
    }
}
public class USA extends Country {

    public USA(UnitedNation mediator) {
        super(mediator);
        
    }
    
    public void Declare(String message)
    {
        this.unitedNation.Declare(message, this);
    }
    
    public void GetMessage(String message)
    {
        System.out.println("USA get message:"+message);
    }
}
package com.jayfulmath.designpattern.agency;

import com.jayfulmath.designpattern.main.BasicExample;

/*代理模式的优点:可以减少多个College之间的相互关系,可以独立的改变College 和mediator
 * 缺点:就是ConcreateMediator责任太多,耦合性低。
 * 
 * */
public class AgencyMain extends BasicExample {

    @Override
    public void startDemo() {
        UNSC unsc = new UNSC();
        
        USA usa  = new USA(unsc);
        Iraq iraq = new Iraq(unsc);
        unsc.usa = usa;
        unsc.iraq = iraq;
        
        usa.Declare("Do not using neclear weapons");
        iraq.Declare("we have not neclear weapons");
    }

}

使用场景:就是集中处理交互关系,比如各个同等类之间的交互。

原文地址:https://www.cnblogs.com/deman/p/4201365.html