中介模式
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和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般配
*************************************************************************