外观模式(Facade Pattern)
2017-04-06 16:48
239 查看
标签 : 设计模式
外观模式是结构型模式。
定义
为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口(Facade类),这个接口使得这一子系统更加容易使用。
例子
把一个子系统比作公司,外观类就是公司的公关部,任何客户与这个公司合作只需要找公关部即可,公关部会根据客户的需求调用公司内部资源。降低了客户和这个公司的“耦合”。
如图:
系统角色
(1)外观角色(Facade):是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组合。
(2)子系统角色(Subsystem classes):实现子系统的功能,并处理由Facade对象指派的任务。对子系统而言,facade和client角色是未知的,没有Facade的任何相关信息;即没有指向Facade的实例。
(3)客户角色(client):调用facade角色获得完成相应的功能。
具体实现
例如子系统里面有类A、类B、和类C。不使用facade时,客户代码需要自己构造类A、类B或类C对象,构造后调用。但引入facade后,把类A、类B和类C对象都放在facade里,客户代码只需要构造一个facade对象即可访问子系统。
优点
(1)降低子系统使用的复杂性,隐藏内部复杂行为。
(2)修改子系统接口时只需要修改facade,客户端可以保持不变。
缺点
违背“开闭原则”。
设计模式六大原则
外观模式是结构型模式。
定义
为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口(Facade类),这个接口使得这一子系统更加容易使用。
例子
把一个子系统比作公司,外观类就是公司的公关部,任何客户与这个公司合作只需要找公关部即可,公关部会根据客户的需求调用公司内部资源。降低了客户和这个公司的“耦合”。
如图:
系统角色
(1)外观角色(Facade):是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组合。
(2)子系统角色(Subsystem classes):实现子系统的功能,并处理由Facade对象指派的任务。对子系统而言,facade和client角色是未知的,没有Facade的任何相关信息;即没有指向Facade的实例。
(3)客户角色(client):调用facade角色获得完成相应的功能。
具体实现
例如子系统里面有类A、类B、和类C。不使用facade时,客户代码需要自己构造类A、类B或类C对象,构造后调用。但引入facade后,把类A、类B和类C对象都放在facade里,客户代码只需要构造一个facade对象即可访问子系统。
优点
(1)降低子系统使用的复杂性,隐藏内部复杂行为。
(2)修改子系统接口时只需要修改facade,客户端可以保持不变。
缺点
违背“开闭原则”。
设计模式六大原则
相关文章推荐
- 设计模式[7] Facade Pattern 外观模式
- 《Head First Design Patterns》笔记八:外观模式(Facade Pattern)
- 极速理解设计模式系列:13.外观模式(Facade Pattern)
- Java之外观模式(Facade Pattern)
- 设计模式 - Facade Pattern(外观模式)
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
- 解读设计模式----外观模式(Facade Pattern),谈阿牛讨媳妇故事
- 设计模式-外观模式(Facade Pattern)
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
- 解读设计模式----外观模式(Facade Pattern),谈阿牛讨媳妇故事
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 设计模式-外观模式(Facade Pattern)
- [译]The Facade Pattern外观设计模式 from Chapter 6 of《Design Patterns Explained》
- 设计模式学习笔记十三:外观模式(Facade Pattern)
- 外观模式(facade pattern)(看电影)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- c++设计模式:外观模式(Facade Pattern)
- 极速理解设计模式系列:13.外观模式(Facade Pattern)