`
chxiaowu
  • 浏览: 236319 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Head First 设计模式学习笔记(八)外观模式

 
阅读更多

外观模式:为子系统中的一组接口提供一个统一接口。外观模式定义了一个更高层的接口,使子系统更加容易使用。


外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。

 

 

 

举个例子
我们把一个文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第
一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。(两个抽屉还好说,但如果是n个呢?)所以对于客户来说,这些取钥匙的过程不需要知道,他们只需要按一个按钮,然后文件就自动取出来。代码例子如下:

 

1、

public class DrawerOne {
public void open() {
   System.out.println("第一个抽屉被打开了");
   getKey();
}

public void getKey() {
   System.out.println("得到第二个抽屉的钥匙");
}
}

 

 

2、

public class DrawerTwo {
public void open() {
   System.out.println("第二个抽屉被打开了");
   getFile();
}

public void getFile() {
   System.out.println("得到这个重要文件");
}
}

 

 

3、

//这就是外观类,对客户隐藏了所有具体细节
//client类只需要调用一个open()就完成所有操作
public class DrawerFacade {
DrawerOne darwerOne = new DrawerOne();
DrawerTwo darwerTwo = new DrawerTwo();

public void open() {
   darwerOne.open();
   darwerTwo.open();
}
}

 

 

4、

public class Client {
public static void main(String[] args) {
   DrawerFacade drawer = new DrawerFacade();
   drawer.open();
}
}

 

 

 

 

输出结果:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics