外观模式
外观模式主要是为多个复杂的子系统提供一个唯一的入口,它是迪米特法则的典型应用。
举个网购的例子,当我购买一件物品时,它会经过支付系统,仓库系统,物流系统,对于用户来说,只需要有一个购买的动作就可以了。
代码如下
public class AppearanceTest {
public static void main(String[] args) {
// 客户端调用
Appearance appearance = new Appearance();
appearance.buy(new Goods("洗发水"));
}
}
class Goods {
private String name;
public Goods(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// 仓库系统
class WarehouseSystem {
public boolean isStock(Goods goods) {
System.out.println(goods.getName() + "有库存");
return true;
}
}
// 支付系统
class PaySystem {
public boolean pay(Goods goods) {
System.out.println("支付" + goods.getName() + "成功");
return true;
}
}
// 物流系统
class LogisticsSystem {
public void deliver(Goods goods) {
System.out.println(goods.getName() + "发货成功");
}
}
// 外观模式类
class Appearance {
public void buy(Goods goods) {
WarehouseSystem warehouseSystem = new WarehouseSystem();
boolean stock = warehouseSystem.isStock(goods);
// 判断是否有库存
if (stock) {
PaySystem paySystem = new PaySystem();
boolean pay = paySystem.pay(goods);
// 判断是否支付成功
if (pay) {
LogisticsSystem logisticsSystem = new LogisticsSystem();
logisticsSystem.deliver(goods);
}
}
}
}
外观模式在整合很多第三方api可以使用,用户无需知道里面的细节,对用户端非常友好。
参考资料:
1.http://c.biancheng.net/view/1369.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git