您的位置:首页 > 其它

设计模式之外观模式实例

2015-01-19 09:43 253 查看
外观模式的意图是:为了给子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式解决了客户所要使用的系统中由于子系统过多导致的客户使用困难的情况。下面采用一个汽车系统的例子说明此模式。

下面先看一下生成汽车各个子系统的代码。
引擎字系统:
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: