Java基础

设计模式3.7 门面模式

2018-12-02  本文已影响0人  卢卡斯哔哔哔

点击进入我的博客

门面模式(Facade Pattern)要求一个子系统的外部与其内部通信,必须通过一个统一的门面对象进行。

3.7.1 门面模式结构

门面模式没有一个一般化的类图描述,可以用下面的例子来说明。


门面模式

3.7.2 细节

门面数量

通常只需要一个门面类,而且只有一个实例,因此可以设计称单例模式。当然也可有多个类。

使用场景
  1. 为一个复杂的子系统提供一个简单的接口
  2. 使子系统和外部分离开来
  3. 构建一个层次化系统时,可以使使用Facade模式定义系统中每一层,实现分层。
优点
  1. 减少系统之间的相互依赖。
  2. 提高了安全性。
缺点
  1. 不符合开闭原则
  2. 如果要改东西很麻烦,继承重写都不合适。
Java例子

MVC三层结构

3.7.3 KFC例子

假如没有服务员(门面),顾客(外部系统)要点一个套餐需要知道每个套餐包含的食物(子系统)种类,这样就会非常麻烦,所以最好的方式是直接告诉服务员套餐名称就好了。

public class Customer {
    public static void main(String[] args) {
        Waiter waiter = new Waiter();
        List<Food> foodList = waiter.orderCombo("Combo1");
    }
}

abstract class Food {}
class MiniBurger extends Food {}
class MexicanTwister extends Food {}
class CornSalad extends Food {}
class HotWing extends Food {}
class PepsiCola extends Food {}

class Waiter {
    public List<Food> orderCombo(String comboName) {
        List<Food> foodList;
        switch (comboName) {
            case "Combo1" : 
                foodList = Arrays.asList(new MiniBurger(), new CornSalad(), new PepsiCola()); 
                break;
            case "Combo2":
                foodList = Arrays.asList(new MexicanTwister(), new HotWing(), new PepsiCola());
                break;
            default:
                foodList = new ArrayList<>();
        }
        return foodList;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读