美文网首页Java基础
设计模式3.7 门面模式

设计模式3.7 门面模式

作者: 卢卡斯哔哔哔 | 来源:发表于2018-12-02 22:37 被阅读0次

点击进入我的博客

门面模式(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.7 门面模式

    点击进入我的博客 门面模式(Facade Pattern)要求一个子系统的外部与其内部通信,必须通过一个统一的门面...

  • 设计模式-门面模式

    一:门面模式的定义 外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散...

  • 设计模式—门面模式

    门面(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式...

  • 外观模式(Facede)

    本文参考自: 《JAVA设计模式》之外观模式(Facade) 1. 作用 外观模式也叫门面模式,门面模式是对象的结...

  • OkHttp的使用之设计模式

    使用的设计模式有: 创建者模式 策略模式 门面模式 责任链模式

  • 门面模式设计

    门面模式 两个作用: 1、简化类的接口 2、消除类与使用它的客户代码之间的耦合 门面模式常常是开发人员最亲密的朋友...

  • 设计模式——门面模式(外观模式)

    《Head First 设计模式》《设计模式之禅(第二版)》 学习笔记,码云同步更新中如有错误或不足之处,请一定指...

  • 学好设计模式防被祭天:门面模式

    为了防止被“杀”了祭天,学点设计模式,并总结下还是有必要的。 一:理解 门面模式也称为外观模式。 门面模式提供了一...

  • iOS单例模式

    1 单例模式 它是一种设计模式(常见的设计模式有:观察者模式、工厂模式、门面模式等)。单例设计模式中,一个类只有一...

  • Java设计模式 - 门面模式

    定义 门面模式又叫做外观模式,是常见的设计模式之一。在代码中可能无意之中就会使用到门面模式,甚至一些第三方开源 S...

网友评论

    本文标题:设计模式3.7 门面模式

    本文链接:https://www.haomeiwen.com/subject/bxzccqtx.html