外观模式(Facade)
来源:互联网 发布:手机八格切图软件 编辑:程序博客网 时间:2024/05/01 04:43
概念
外观模式(Facade)是结构型模式,为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。
适用场景
- 当要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具有可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Façade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Façade层。
- 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Façade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
- 当你需要构建一个层次结构的子系统时,使用Façade模式定义子系统中每层的入口点,如果子系统之间是相互依赖的,你可以让它们仅通过Façade进行通讯,从而简化了它们之间的依赖关系。
模型
此图从网上找的,若侵权,请联系我
优点
- 对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。
- 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。
- 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
- 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。
缺点
- 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。
- 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
外观模式最大的缺点在于违背了“开闭原则”,
当增加新的子系统或者移除子系统时需要修改外观类,可以通过引入抽象外观类在一定程度上解决该问题,客户端针对抽象外观类进行编程。对于新的业务需求,不修改原有外观类,而对应增加一个新的具体外观类,由新的具体外观类来关联新的子系统对象,同时通过修改配置文件来达到不修改源代码并更换外观类的目的。
应用
- 不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所用规则。如果只需要使用系统的部分功能,那么你为新类创建的API将比原有系统的API简单的多。
- 希望封装或者隐藏原系统。
- 希望使用原系统的功能,而且还希望增加一些附件功能。
参考:
JAVA设计模式十九–Facade(外观模式)
设计模式(九)外观模式Facade(结构型)
Java外观模式(Facade)
阅读全文
0 0
- 外观模式(Facade)
- 外观模式(Facade)
- Facade(外观)模式
- 外观模式(Facade)
- Facade(外观)模式
- 外观模式(Facade)
- 外观模式(Facade)
- 外观模式(Facade)
- 外观模式(Facade)
- 外观(Facade)模式
- 外观模式(Facade)
- 外观模式(Facade)
- Facade(外观)模式
- 外观模式(Facade)
- 外观模式(Facade)
- 外观模式(Facade)
- 外观模式(Facade)
- 外观模式(Facade)
- Hbase Java API
- Java核心技術卷_2_注釋與數據類型
- JSON.parse()方法将数据转换为javascript对象
- React-Native 安卓出现图片资源路径正确,却无法加载显示
- JAVA 模拟瞬间高并发
- 外观模式(Facade)
- Android 调用echart图表,实现牛逼的效果
- 数据库第一课
- oc 同步、异步图片下载
- mysql数据库定时自动备份
- 打印或者第三方设备
- web版本问题
- ubuntu1604
- Altera Stratix V FPGA硬件加速平台