Facade外观模式
来源:互联网 发布:js获取元素的属性值 编辑:程序博客网 时间:2024/06/06 00:09
外观模式(Facade)是结构型设计模式,外观模式就是为一个子系统中的多个类提供统一接口的方法,把一个组件单元构建为一个子系统有助于减少软件的复杂性,而且可以使子系统与其他组件的通信关系更加间接、易控制,可以最大限度的降低组件间的耦合度。达到这一个目标的最好方法就是引进一个外观类,让它为子系统的通用功能提供一个简单一致的公共接口。
在别处看到一个例子,就是组装电脑,需要一台电脑,你可以去电子城,选择主板、显示器、CPU、各种外设等组装一台电脑。当然,为了方便,也可以直接找一家装机公司,它们负责将各种电脑组件组装好。这就是外观模式的概念。外观模式就是将多个关系比较复杂的类放到一个外观类中统一处理,从而外部调用起来只要与外观打交道,而不必清楚内部各个类之间的调用关系,简化了客户端调用的复杂度。
考虑一下在ATM取款的系统:
系统接口:
package facade;public interface GetMoney {public void doThings();}子系统1:
package facade;public class InsertCards implements GetMoney{public InsertCards(){}@Overridepublic void doThings() {// TODO Auto-generated method stub//Do somethingSystem.out.println("插入银行卡...");}}
子系统2:
package facade;public class PassWord implements GetMoney{public PassWord(){}@Overridepublic void doThings() {// TODO Auto-generated method stub//Do somethingSystem.out.println("输入密码...");}}子系统3:
package facade;public class GetCash implements GetMoney{public GetCash(){}@Overridepublic void doThings() {// TODO Auto-generated method stub//Do somethingSystem.out.println("取出现金...");}}
如果不使用facade模式,则客户端程序:
package facade;public class Client_Without_Facade {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubInsertCards insertcards = new InsertCards();insertcards.doThings();PassWord password = new PassWord();password.doThings();GetCash getcash = new GetCash();getcash.doThings();System.out.println("Succeed to get money!");}}
如果银行在某一天要增加ATM取款的安全,要增加ATM取款时候的步骤,增加步骤A,那么必须要修改客户端程序,这样代价就高了。如果使用Facade模式,则编写Facade类:
package facade;public class Facade {public Facade(){}public void doThings(){InsertCards insertcards = new InsertCards();insertcards.doThings();PassWord password = new PassWord();password.doThings();GetCash getcash = new GetCash();getcash.doThings();}}
客户端代码:
package facade;public class Client {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubFacade facade = new Facade();facade.doThings();System.out.println("Succeed to get money!");}}
这样如果要做出上述修改,则只需修改Facade类和增加子系统即可,不用修改Client程序。
综上所述,Facade模式的优点:
1.松散耦合。外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块可以更容易扩展和维护。
2.简单易用。外观模式让子系统更易用,客户商无需要了解子系统的内部细节,更不需要与各子系统模块进行交互,只需要与外观对象进行交互就可以呢,由外观模式为客户端提供一站式服务。
1 0
- Facade模式(外观模式)
- 外观模式(Facade)
- 外观模式(Facade Pattern)
- 外观(Facade)模式
- 外观模式(Facade Pattern)
- Facade(外观)模式
- Facade外观模式
- facade(外观模式)
- Facade 外观模式
- 外观模式(Facade)
- Facade外观模式
- Facade外观模式
- 外观模式Facade
- 外观模式(Facade)
- Facade(外观)模式
- Facade外观模式
- 外观模式(Facade)
- 外观模式(Facade)
- android给View设置上下左右边框
- 用PL/SQL语言编写一程序,实现按部门分段统计各个工资段的职工人数、以及各部门的工资总额
- MySQL安装图解_学习笔记
- Android开发之sdk更新问题Failed to fetch URL
- 制作私有源同步脚本
- Facade外观模式
- CPP多线程与可变参数
- C#调用C/C++动态库 封送结构体,结构体数组
- unity---First
- durcframework简介
- C# 调用C/C++回调函数
- poj1797
- 发了是吗 你缺签了吗
- [ACdream]小Y上学记——修学分[拓扑排序]