国家之间关系复杂,但是有了联合国了以后,大家都到联合国上解决问题,这就是中介者。
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"); } }
使用场景:就是集中处理交互关系,比如各个同等类之间的交互。