-
简介:
- 软件开发过程中,客户端经常与复杂的系统内部的子系统进行耦合,从而导致客户单程序随着子系统的变化而变化,为了将他们解耦而产生是外观模式,也称作门面模式
-
定义:
- 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
-
组成:
- façade:这个外观类为子类提供一个共同的对外接口
- Client:客户对象通过一个外观接口读写子系统中各个接口的数据资源
-
示例情景:
- 一个电脑的开机与关机,电脑开机,需要先提供电力,然后内存启动,cpu启动,最后电脑启动,电脑关闭,需要先cpu关闭,然后内存关闭,最后电力关闭,使用外观模式来模拟编程实现。
-
步骤:
-
定义一个外观类ComputerFacade
-
package com.lvsling.facade; public class ComputerFacade { private CPU cpu; private Memory memory; private Power power; public ComputerFacade(){ cpu = new CPU(); memory = new Memory(); power = new Power(); } public void startup(){ power.startup(); memory.startup(); cpu.startup(); } public void run(){ System.out.println("---------------"); System.out.println("computer run..."); System.out.println("---------------"); } public void shutdown(){ cpu.shutdown(); memory.shutdown(); power.shutdown(); } } |
-
定义一个子系统类Power
package com.lvsling.facade; public class Power { public void startup(){ System.out.println("Power start..."); } public void shutdown(){ System.out.println("Power shutdown..."); } } |
-
定义一个子系统类Memory
package com.lvsling.facade; public class Memory { public void startup(){ System.out.println("Memory start..."); } public void shutdown(){ System.out.println("Memory shutdown..."); } } |
-
定义一个子系统类CPU
package com.lvsling.facade; public class CPU { public void startup(){ System.out.println("CPU start..."); } public void shutdown(){ System.out.println("CPU shutdown..."); } } |
-
定义一个客户端类Client
package com.lvsling.facade; public class Client { public static void main(String[] args) { ComputerFacade computerFacade = new ComputerFacade(); computerFacade.startup(); computerFacade.run(); computerFacade.shutdown(); } } |
-
控制台打印结果
Power start... Memory start... CPU start... --------------- computer run... --------------- CPU shutdown... Memory shutdown... Power shutdown... |
-
优点:
-
外观模式屏蔽了子系统组件,从而简化了接口,减少客户端处理的对象数据并使子系统的使用更加简单
-
外观模式实现了客户单和子系统的耦合关键,而子系统内部的功能是紧耦合的,松耦合是子系统的变化不会影响到客户端
-
-
缺点:
- 如果修改了子系统那么需要修改外观类或客户端的源码
-
应用场景
-
为一个复杂的子系统提供简单的接口
-
提供子系统的独立性
-
在层次结构中,可以定义外观模式定义系统中每一层的入口
-
-
总结
- 以上就是对于外观模式的基本了解了,外观模式的最大好处,也就是优点也就体现出来了,那就是客户端跟子系统松散耦合。