结构型设计模式 — 外观模式

作者: Chase_stars | 来源:发表于2019-08-23 20:56 被阅读6次

笨蛋自以为聪明,聪明人才知道自己是笨蛋。 — 莎士比亚

写在前面

外观模式也可以称为门面模式,在我们开发Android的时候,无论是开发SDK还是封装API,大多会用到外观模式。外观模式通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样降低了用户的使用成本。

外观模式的定义:要求一个子系统的外部与内部的通信必须通过一个统一的类进行,此种模式提供了一个高层接口,使得子系统更易于使用。

外观模式.png

外观类(Facade):知道那些子系统有负责处理请求,将客户端的请求代理给适当的子系统对象。
子系统类(SubSystem):可以有一个或多个子系统,实现子系统的功能,处理外观类指派的任务,需要注意的是子系统类不含有外观类的引用。

认识外观

下面通过一个例子来认识外观模式:

我要买一双鞋子和一件衣服,但是去实体店的话就要先去鞋店,再去服装店。可是我不想去两个地方,那么我出于懒惰就选择了某宝购物网站,某宝购物网站有许多店铺,这样就能在一个地方买到鞋子又能买到衣服,何乐而不为?

1.子系统类

因为卖鞋子和衣服的是不同的店铺,所以这两个店铺就是两个子系统类。

/**
 * 子系统类
 */
public class ShoesSubSystem {

    public void buyShoes() {
        Log.d("ShoesSubSystem", "购买鞋子!!!");
    }
}

/**
 * 子系统类
 */
public class ClothesSubSystem {

    public void buyClothes() {
        Log.d("ClothesSubSystem", "购买衣服!!!");
    }
}
2.外观类

某宝购物网站既有卖鞋子的店铺又有卖衣服的店铺,我就可以通过某宝购物网站买到鞋子和衣服,所以某宝购物网站就是外观类。

/**
 * 外观类
 */
public class Facade {
    
    private ShoesSubSystem mShoesSubSystem;
    private ClothesSubSystem mClothesSubSystem;
    
    public Facade() {
        mShoesSubSystem = new ShoesSubSystem();
        mClothesSubSystem = new ClothesSubSystem();
    }
    
    public void buyShoes() {
        mShoesSubSystem.buyShoes();
    }
    
    public void buyClothes() {
        mClothesSubSystem.buyClothes();
    }
}
3.使用

现在创建一个客户端使用外观类,也就是我通过某宝购物网站购买鞋子和衣服。

/**
 * 客户端
 */
public class Client {
    
    private Facade mFacade;
    
    public Client() {
        // 创建外观类
        mFacade = new Facade();
        // 购买鞋子
        mFacade.buyShoes();
        // 购买衣服
        mFacade.buyClothes();
    }
}

总结

外观模式的优点:

  • 减少系统的相互依赖,所有的依赖都是对外观类的依赖,与子系统无关。
  • 对用户隐藏子系统的具体实现,减少用户对子系统的耦合。这样即便子系统发生变化,用户也不会感知。
  • 加强了安全性,子系统中的方法如果没有在外观类中开通,就无法访问子系统中的方法。

外观模式的缺点:

  • 不符合开放封闭原则。如果业务需求出现变更,则可能要直接修改外观类。

相关文章

  • Android设计模式——外观模式(七大结构型)

    1.外观模式介绍 外观模式(Facade Pattern),是七大结构型设计模式之一。 外观模式运...

  • 结构型模式:外观模式

    文章首发:结构型模式:外观模式 七大结构型模式之五:外观模式。 简介 姓名 :外观模式 英文名 :Facade P...

  • Android设计模式之(21)----外观模式

    外观模式 外观模式属于结构型设计模式. 简单来说外观模式就是一个比较牛逼的封装理解而已.将一系列的操作,功能封装在...

  • S13. 外观模式

    外观模式 外观模式又叫门面模式,是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。 外观模...

  • 结构型设计模式 - 外观模式

    为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用(子系统往往因为不断演...

  • 结构型设计模式-外观模式

    定义 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更...

  • 结构型设计模式.外观模式

    <在于降低系统的复杂程度> 概念理解 定义:又叫门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统...

  • 结构型设计模式 — 外观模式

    笨蛋自以为聪明,聪明人才知道自己是笨蛋。 — 莎士比亚 写在前面 外观模式也可以称为门面模式,在我们开发Andro...

  • 【设计模式】结构型设计模式汇总

    结构型设计模式汇总 结构型设计模式名称 结构型设计模式主要包括 7 大类: 代理模式 桥接模式 装饰器模式 适配器...

  • 外观模式(Facede)

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

网友评论

    本文标题:结构型设计模式 — 外观模式

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