中介者模式
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。
案例
控制塔台:
public class ControlTower {
private boolean canDo = true;
public void acceptRequest(){
if(canDo){
System.out.println("允许。。");
canDo = false;
}else{
System.out.println("不允许。。");
}
}
public void finish(){
canDo = true;
}
}
机长:
public abstract class Captain {
abstract void fly();
abstract void land();
abstract void success();
public class HU8778 extends Captain{
ControlTower controlTower;
public void setControlTower(ControlTower controlTower) {
this.controlTower = controlTower;
}
@Override
void fly() {
System.out.println("HU8778请求起飞......");
//问每个机长能否起飞?
controlTower.acceptRequest();
}
@Override
void land() {
System.out.println("HU8778请求降落......");
controlTower.acceptRequest();
}
@Override
void success() {
System.out.println("完成......");
controlTower.finish();
}
}
public class SC8633 extends Captain{
ControlTower controlTower ;
public void setControlTower(ControlTower controlTower) {
this.controlTower = controlTower;
}
@Override
void fly() {
System.out.println("SC8633 请求起飞......");
//问每个机长能否起飞?
controlTower.acceptRequest();
}
@Override
void land() {
System.out.println("SC8633 请求降落......");
//问每个机长能否起飞?
controlTower.acceptRequest();
}
@Override
void success() {
System.out.println("SC8633 完成......");
//问每个机长能否起飞?
controlTower.finish();
}
}
测试:
public class Main {
public static void main(String[] args) {
ControlTower controlTower = new ControlTower();
HU8778 hu8778 = new HU8778();
SC8633 sc8633 = new SC8633();
hu8778.setControlTower(controlTower);
sc8633.setControlTower(controlTower);
hu8778.fly();
sc8633.fly();
hu8778.success();
sc8633.fly();
}
}