外观模式是为了解决类与类之间依赖关系的,外观模式将类间关系放在一个Facade类中,降低了类类之间的耦合度,该模式中不涉及接口

举一个经典的例子:

CPU类:

 public class CPU {
public void startup(){
System.out.println("cpu startup");
} public void shutdown(){
System.out.println("cpu shutdown");
}
}

Mainboard类:

 public class Mainboard {  

     public void startup(){
System.out.println("mainboard startup");
} public void shutdown(){
System.out.println("mainboard shutdown");
}
}

Disk类:

 public class Disk {  

     public void startup(){
System.out.println("disk startup");
} public void shutdown(){
System.out.println("disk shutdown");
}
}

Computer类(外观类):

 public class Computer {
private CPU cpu;
private Mainboard mainboard;
private Disk disk; public Computer(){
cpu = new CPU();
mainboard = new Mainboard();
disk = new Disk();
} public void startup(){
System.out.println("starting the computer");
cpu.startup();
mainboard.startup();
disk.startup();
System.out.println("computer is started");
} public void shutdown(){
System.out.println("closing the computer");
disk.shutdown();
mainboard.shutdown();
cpu.shutdown();
System.out.println("computer is closed");
}
}

测试类:

 public class Main {  

     public static void main(String[] args) {
Computer computer = new Computer();
computer.startup();
computer.shutdown();
}
}

测试结果:

starting the computer
cpu startup
mainboard startup
disk startup
computer is started
closing the computer
disk shutdown
mainboard shutdown
cpu shutdown
computer is closed

如果我们没有外观类(Computer),CPU、Mainboard、Disk之间将会相互持有实例对象,造成严重的依赖;而有了Computer,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用。这就是外观模式!

最新文章

  1. 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
  2. aix磁盘分区挂载问题
  3. Unity3D心得分享
  4. adapter.notifyDataSetChanged(); 没有反应
  5. 想要提高网页转换率?试试这16 个UI 秘诀
  6. JQuery设置和去除disabled属性
  7. 求二叉树的深度和宽度[Java]
  8. functional cohesion
  9. 每日一九度之题目1016:火星A+B
  10. 六月计划#1A(6.1-6.8)
  11. java 8 中lambda表达式学习
  12. structs 拦截器
  13. let区别(关于racket和r5rs)
  14. python3 爬取boss直聘职业分类数据(未完成)
  15. Java SE之字符串常量池
  16. MIME Type和Content-Type
  17. 小菜菜mysql练习解读分析2——查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
  18. AsynchronousFileChannel 使用的默认线程池的疑问
  19. Payment相关逻辑
  20. PL/SQL常用语法及举例

热门文章

  1. 简单学C——第七天
  2. Noah的学习笔记之Python篇:装饰器
  3. html5--indexedDB
  4. hadoop单机安装
  5. bzoj1297
  6. bzoj1389
  7. 水题:HDU 5112 A Curious Matt
  8. HDU-1035 Robot Motion
  9. unity3d 制造自己的水体water effect(二)
  10. java基础(七)面向对象(二)