设计模式学习笔记(一)--Facade外观模式
来源:互联网 发布:阿城 知乎 编辑:程序博客网 时间:2024/06/05 23:01
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。
大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。
我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻成系统,有点夸张了(DrawerOne、DrawerTwo):
class DrawerOne {
public void open(){
System.out.println("第一个抽屉被打开了");
getKey();
}
public void getKey(){
System.out.println("得到第二个抽屉的钥匙");
}
}
class DrawerTwo{
public void open(){
System.out.println("第二个抽屉被打开了");
getFile();
}
public void getFile(){
System.out.println("得到这个重要文件");
}
}
publicclass Client{
public static void main(String []args){
DrawerOne darwerOne=new DrawerOne();
DrawerTwo darwerTwo=new DrawerTwo();
darwerOne.open();
darwerTwo.open();
}
}
由于没有使用Façade模式,可以看到要想得到这个文件要首先打开第一个抽屉,然后再打开第二个抽屉,在我们实际所开发的系统中,有时候客户要实现某一操作,并不需要知道实现这一操作的详细步骤,而是简单地点击某一个按钮就可以得到自己想要的结果。下面对上面的代码使用Façade模式进行改进,建立一个FacadeDrawer类:
class DrawerFacade{
DrawerOnedarwerOne=new DrawerOne();
DrawerTwodarwerTwo=new DrawerTwo();
public void open(){
darwerOne.open();
darwerTwo.open();
}
}
修改Client类:
publicclass DrawerClient{
public static void main(String []args){
DrawerFacade drawer=new DrawerFacade();
drawer.open();
}
}
输出结果如下:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件
正如上面所说,客户端client,它并不需要关心子系统,而是关心DrawerFacade所留下来的和外部交互的接口,而子系统在DrawerFacade的聚合。
以上只是个人拙见,哪里有不正确的地方,希望大家多多批评指正。^_^
Facade模式主要适用于以下几种情况:
1) 不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所有规则。如果只需要使用系统的部分功能,那么你为新类所创建的API将比原系统的API简单的多。
2) 希望封装或者隐藏系统原系统。
3) 希望使用原系统的功能,而且还希望增加一些新的功能。
4) 编写新类的成本小于所有人学会使用或者未来维护原系统上所需的成本。
- 设计模式学习笔记(一)--Facade外观模式
- 设计模式学习笔记(一)--Facade外观模式
- [设计模式学习笔记]FACADE外观模式
- 《设计模式》学习笔记--外观Facade
- 设计模式学习-Facade(外观)
- 设计模式学习笔记十一(Facade外观模式)
- java 设计模式学习笔记七 facade外观模式
- 【设计模式】学习笔记10:外观模式(Facade)
- 设计模式学习笔记——外观(Facade)模式
- 设计模式学习笔记十三:外观模式(Facade Pattern)
- 设计模式 笔记 外观模式 Facade
- 设计模式之外观(Facade)模式(笔记)
- 设计模式笔记-Facade外观模式
- Facade外观模式 ---设计模式学习
- 设计模式学习之---Facade(外观)模式
- 设计模式入门学习 Facade外观模式
- 设计模式学习笔记(十一)——Facade外观
- 设计模式 - 外观(Facade)
- lua 中table的sort函数排序无法对非连续性索引的表排序
- 并查集(Union-Find) 应用举例 --- 基础篇
- poj1573
- 使用gprof测量程序运行时间
- andorid如何引入百度地图服务
- 设计模式学习笔记(一)--Facade外观模式
- 孙鑫vc++学习笔记
- 杂记连载之Makefile
- 有意思
- java获取路径
- 数据结构C语言动态分配实现串
- poj1860
- hdu4027 Can you answer these queries?
- Assembly in Linux (Stack, External Procedure)