设计模式3.7 门面模式

字节跳动飞书内推!
北京、杭州、武汉、广州、深圳、上海,六大城市等你来投。
感兴趣的朋友可以私我咨询&内推,也可以通过链接直接投递
海量HC,极速响应,快来和我成为同事吧。
今日头条、抖音、Tik Tok也可以内推~

点击进入我的博客

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

3.7.1 门面模式结构

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


门面模式
  • 门面(Facade)角色:外部可以调用这个角色的方法。此角色知道子系统的功能和责任。
  • 子系统(Subsystem)角色:可以有多个子系统,子系统不需要知道门面的存在。

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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击进入我的博客 3.1 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,使得原本因接口不匹配...
    卢卡斯哔哔哔阅读 3,923评论 0 1
  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 9,158评论 0 14
  • 定义 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口...
    步积阅读 6,646评论 0 3
  • 又感冒了。好像是今年第二次。 我觉得这并不是简单的伤风受凉,这是过度训练的信号。(第一次感冒也是因为训练) 不,单...
    ievanz的替身阅读 1,781评论 0 1
  • 【如梦令·昨夜雨疏风骤】 李清照 昨夜雨疏风骤, 浓睡不消残酒。 试问卷帘人, 却道海棠依旧”。 知否?知否?应是...
    ac043f7428c4阅读 3,247评论 0 3