设计模式:Mediator--中介模式

    xiaoxiao2022-07-13  139

    中介模式

    中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。先看看图:

    User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高,为了解耦,引入了Mediator类,提供统一接口,MyMediator为其实现类,里面持有User1和User2的实例,用来实现对User1和User2的控制。这样User1和User2两个对象相互独立,他们只需要保持好和Mediator之间的关系就行,剩下的全由MyMediator类来维护!基本实现:

    ******************************************************************************************************************************* 

     类之间的交互被统一放在Mediator对象中,对象通过mediator对象交互,mediator对象起到控制器的作用 mediator: 中介类的抽象 concreteMediator  具体中介类 colleague  关联抽象类 concreteColleague  具体关联类

     

    实例代码一:

    /** * User类统一接口,User1和User2分别是不同的对象,二者之间有关联, * 如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高, * 为了解耦,引入了Mediator类,提供统一接口,MyMediator为其实现类, * 里面持有User1和User2的实例,用来实现对User1和User2的控制。 * 这样User1和User2两个对象相互独立,他们只需要保持好和Mediator之间的关系就行, * 剩下的全由MyMediator类来维护!基本实现 */ public interface Mediator { public void createMediator(); public void workAll(); } ***************************************************************** public class MyMediator implements Mediator { private User user1; private User user2; @Override public void createMediator() { user1 = new User1(this); user2 = new User2(this); } @Override public void workAll() { user1.work(); user2.work(); } } ***************************************************************** public abstract class User { private Mediator mediator; public User(Mediator mediator) { this.mediator = mediator; } public Mediator getMediator() { return mediator; } public void setMediator(Mediator mediator) { this.mediator = mediator; } public abstract void work(); } ***************************************************************** public class User1 extends User { public User1(Mediator mediator) { super(mediator); } @Override public void work() { System.out.println("use1 exe"); } } ***************************************************************** public class User2 extends User { public User2(Mediator mediator) { super(mediator); } @Override public void work() { System.out.println("use2 exe!"); } } ***************************************************************** /** * 中介模式 */ public class MainClass { public static void main(String[] args) { Mediator mediator = new MyMediator(); mediator.createMediator(); mediator.workAll(); } } 测试结果: use1 exe use2 exe! *****************************************************************

     

    实例代码二:

     

    public class Mediator { private Man man; private Woman woman; public void setMan(Man man) { this.man = man; } public void setWoman(Woman woman) { this.woman = woman; } public void getPartener(Person person) { //将搭档设置上 if(person instanceof Man) { this.setMan((Man)person); }else { this.setWoman((Woman)person); } if(man == null || woman == null) { System.out.println("我不是同性恋"); }else{ //判断条件 if(man.getCondition() == woman.getCondition()) { System.out.println(man.getName()+"和"+woman.getName()+"般配"); }else { System.out.println(man.getName()+"和"+woman.getName()+"不般配"); } } } } ************************************************************************* public abstract class Person { private String name; private int condition; private Mediator mediator; public Person(String name, int condition, Mediator mediator) { this.name = name; this.condition = condition; this.mediator = mediator; } public Mediator getMediator() { return mediator; } public void setMediator(Mediator mediator) { this.mediator = mediator; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCondition() { return condition; } public void setCondition(int condition) { this.condition = condition; } public abstract void getPartener(Person person); } ************************************************************************* public class Man extends Person { public Man(String name, int condition, Mediator mediator) { super(name, condition, mediator); } @Override public void getPartener(Person person) { this.getMediator().setMan(this); this.getMediator().getPartener(person); } } ************************************************************************* public class Woman extends Person { public Woman(String name, int condition, Mediator mediator) { super(name, condition, mediator); } @Override public void getPartener(Person person) { this.getMediator().setWoman(this); this.getMediator().getPartener(person); } } ************************************************************************* public class MainClass { public static void main(String[] args) { Mediator mediator = new Mediator(); Person man = new Man("zhangsan",7,mediator); Person man2 = new Man("lisi",7,mediator); Person wonman = new Woman("lili",7,mediator); man.getPartener(man2); man.getPartener(wonman); } } ************************************************************************* 测试结果: 我不是同性恋 zhangsan和lili般配 *************************************************************************

     

    最新回复(0)