设计模式之外观模式实例
2015-01-19 09:43
253 查看
外观模式的意图是:为了给子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式解决了客户所要使用的系统中由于子系统过多导致的客户使用困难的情况。下面采用一个汽车系统的例子说明此模式。
下面先看一下生成汽车各个子系统的代码。
引擎字系统:
Engine.java
OilTrans.java
Power.java
收音机系统:
Radio.java
AirConditioner.java
CarFacade.java
客户端代码调用如下:
Client.java
开启电力系统
开启输油系统
发动引擎
打开收音机
关闭收音机
打开空调
关闭空调
停止引擎
关闭输油系统
关闭电力系统
(end)
下面先看一下生成汽车各个子系统的代码。
引擎字系统:
Engine.java
public sclass Engine{ public void start(){ System.out.println("发动引擎"); } public void stop(){ System.out.println("停止引擎"); } }输油子系统:
OilTrans.java
public class OilTrans{ public void start(){ System.out.println("开启输油系统"); } public void stop(){ System.out.println("关闭输油系统"); } }电力系统:
Power.java
public class Power{ public void start(){ System.out.println("开启电力系统"); } public void stop(){ System.out.println("关闭电力系统"); } }上面三个系统是汽车在一启动就立即启动的子系统。下面这些系统是不需要自启动的,客户需要时再启动。
收音机系统:
Radio.java
public class Radio{ public void turnOn(){ System.out.println("打开收音机"); } public void turnOff(){ System.out.println("关闭收音机"); } }空调系统:
AirConditioner.java
public class AirConditioner{ public void turnOn(){ System.out.println("打开空调"); } public void turnOff(){ System.out.println("关闭空调"); } }客户想要直接使用汽车系统直接调用各个子系统的话,复杂度很高,客户必须了解各个子系统的各种功能。如果客户想要使用不同的车型,还需要重新了解新的系统。这使得客户端代码没有稳定性。下面用外观模式的代码来封装变化:
CarFacade.java
public class CarFacade{ private Engine engine=new Engine(); private OilTrans oilTrans=new OilTrans(); private Power power=new Power(); private Radio radio=new Radio(); private AirConditioner airConditioner=new AirConditioner(); private boolean isStart=false; //使用钥匙发动汽车 public void turnOn(){ if(!isStart){ power.start(); oilTrans.start(); engine.start(); isStart=true; } } //关闭汽车系统 public void turnOff(){ if(isStart){ engine.stop(); oilTrans.stop(); power.stop(); isStart=false; } } public void turnOnRadio(){ if(isStart){ radio.turnOn(); } } public void turnOffRadio(){ if(isStart){ radio.turnOff(); } } public void turnOnAirConditioner(){ if(isStart){ ariConditioner.turnOn(); } } public void turnOffAirConditioner(){ if(isStart){ airConditioner.turnOff(); } } }
客户端代码调用如下:
Client.java
public class Client{ public static void main(String[] args){ CarFacade car=new CarFacade(); car.turnOn(); car.turnOnRadio(); car.turnOffRadio(); car.turnOnAirConditioner(); car.turnOffAirConditioner(); car.turnOff(); } }运行结果如下:
开启电力系统
开启输油系统
发动引擎
打开收音机
关闭收音机
打开空调
关闭空调
停止引擎
关闭输油系统
关闭电力系统
(end)
相关文章推荐
- Net设计模式实例之外观模式(Façade Pattern)
- Net设计模式实例之外观模式(Façade Pattern)
- 23种设计模式C++实例之外观模式
- 结合项目实例 回顾传统设计模式(七)适配器模式(附外观模式)
- 设计模式--原型/外观(OC 实例)
- Net设计模式实例之外观模式(Façade Pattern)(1) 推荐
- 设计模式---外观模式 实例
- 【翻译】设计模式之外观(Facade)模式——C++实例
- Net设计模式实例之外观模式(Façade Pattern)
- 结合项目实例 回顾传统设计模式(七)适配器模式(附外观模式)
- Net设计模式实例之外观模式(Façade Pattern)(2)
- 实例解析设计模式中的外观模式在iOS App开发中的运用
- 关于Singleton设计模式的计数器代码实例(拷贝粘贴即可学习)
- 设计模式学习笔记(十一)——Facade外观模式
- 设计模式应用实例(序言)
- .Net中的设计模式——从实例谈OOP、工厂模式和重构
- 设计模式之Facade外观模式
- 设计模式学习笔记(十一)——Facade外观
- 设计模式应用实例(序言)
- 设计模式之Facade(外观)