设计模式学习之中介者模式
1.名词解释:
中介者模式:用一个中介对象来封装一序列的对象交互。中介者使各对象不需要显式地引用,从而使其耦合松散,而且可以独立第改变它们之间的交互。
?
2.代码示例:同事A、同事B通过中介者互相通信。
主控程序类,通过中介者,ColleagueA与ColleagueB进行通信package DesignPattern.MeditorPattern;public class Client {public static void main(String[] args) {ConcreateMeditor m = new ConcreateMeditor();Colleague A = new ColleagueA(m);Colleague B = new ColleagueB(m);m.SetColleagueA((ColleagueA) A);m.SetColleagueB((ColleagueB) B);((ColleagueA) A).send("B, May I love you?");((ColleagueB) B).send("A, I'm sorry, I already have a boy friend.");}}运行结果:Colleague B get a message: B, May I love you?Colleague A get a message: A, I'm sorry, I already have a boy friend.
?
中介者抽象类:package DesignPattern.MeditorPattern;abstract class Meditor {public abstract void send(String message, Colleague colleague);}?
具体中介者类:package DesignPattern.MeditorPattern;public class ConcreateMeditor extends Meditor{private ColleagueA colleagueA;private ColleagueB colleagueB;public void SetColleagueA(Colleague colleague) {if(colleague instanceof ColleagueA) {this.colleagueA = (ColleagueA) colleague;}}public void SetColleagueB(Colleague colleague) {if(colleague instanceof ColleagueB) {this.colleagueB = (ColleagueB) colleague;}}@Overridepublic void send(String message, Colleague colleague) {// TODO Auto-generated method stubif(colleague == colleagueA) {colleagueB.notify(message);} else {colleagueA.notify(message);}}}?
同事抽象类:package DesignPattern.MeditorPattern;public abstract class Colleague {protected Meditor meditor;public Colleague(Meditor meditor) {this.meditor = meditor;}}?
同事A类:package DesignPattern.MeditorPattern;public class ColleagueA extends Colleague {public ColleagueA(Meditor meditor) {super(meditor);// TODO Auto-generated constructor stub}public void send(String message) {meditor.send(message, this);}public void notify(String message) {System.out.println("Colleague A get a message: " + message);}}?
同事B类:package DesignPattern.MeditorPattern;public class ColleagueB extends Colleague {public ColleagueB(Meditor meditor) {super(meditor);// TODO Auto-generated constructor stub}public void send(String message) {meditor.send(message, this);}public void notify(String message) {System.out.println("Colleague B get a message: " + message);}}??