设计模式—中介者模式

定义

用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们直接的交互

代码

中介抽象类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public abstract class Mediator {

private Purchase purchase;
private Stock stock;

public Purchase getPurchase() {
return purchase;
}

public void setPurchase(Purchase purchase) {
this.purchase = purchase;
}

public Stock getStock() {
return stock;
}

public void setStock(Stock stock) {
this.stock = stock;
}

public abstract void salePhone(int number);
public abstract void purchasePhone(int number);


}

中介处理业务类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ConcreteMediator extends Mediator {

@Override
public void salePhone(int number) {
if(super.getStock().getStockNumber()<number){
System.out.println("手机数量不够,需要采购");
super.getPurchase().purchasePhone(number);
}else{
System.out.println("卖了"+number+"件手机");
super.getStock().decreaseStock(number);
}
}

@Override
public void purchasePhone(int number) {
super.getStock().addStock(number);
}
}

抽象的注入中介依赖类

1
2
3
4
5
6
7
public abstract class Colleague {
protected Mediator mediator;

public Colleague(Mediator mediator) {
this.mediator = mediator;
}
}

相关的业务类

1
2
3
4
5
6
7
8
9
10
11
public class Sale extends Colleague {

public Sale(Mediator mediator) {
super(mediator);
}

public void salePhone(int number) {
super.mediator.salePhone(number);
}

}

1
2
3
4
5
6
7
8
9
10
11
12
public class Purchase extends Colleague{

public Purchase(Mediator mediator) {
super(mediator);
}

public void purchasePhone(int number){
System.out.println("采购了"+number+"件手机");
super.mediator.purchasePhone(number);
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Stock extends Colleague{

public Stock(Mediator mediator) {
super(mediator);
}

private static Integer number = 100;

public int getStockNumber(){
return number;
}

public void decreaseStock(int num){
number = number - num;
}

public void addStock(int num){
number = number + num;
}

}

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class MediatorTest {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
Stock stock = new Stock(mediator);
Purchase purchase = new Purchase(mediator);
mediator.setPurchase(purchase);
mediator.setStock(stock);

Sale sale = new Sale(mediator);
purchase.purchasePhone(90);
sale.salePhone(180);
}
}

中介者模式主要是解决几个对象相互依赖的耦合太紧的问题,主要应用在N个对象之间有依赖关系。