iOS 设计模式~门面模式 demo

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄

一、概念

门面模式也称为外观模式。

门面模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。——《Head First设计模式》

在各种服务尽量解耦的情况下,门面模式提供类似聚合层的作用。例如用户下单,需要调用订单服务下订单,还要调用支付服务进行支付,此时可以用门面接口新建一个接口,提供下单和支付功能。客户端只需调用一个方法。

二、例子

// 点灯类

public class Light {

//接通开启

publicvoidturnOn() {

System.out.println("开灯!");

}

//关掉

publicvoidturnOff() {

System.out.println("关灯!");

}

}

// 空调类

public class AirConditioner {

publicvoidturnOn() {

System.out.println("开空调!");

}

publicvoidturnOff() {

System.out.println("关空调!");

}

}

// 热水器类

public class WaterHeater {

publicvoidturnOn() {

System.out.println("开热水器!");

}

publicvoidturnOff() {

System.out.println("关热水器!");

}

}

/**

需求

这是设计了一堆电器类,文章为方便,只给出电灯类,空调类,热水器类。

每个类都有打开和关闭的方法。

每天回家,你会打开所有电器,每天出门,你会关闭所有电器。

*/

//委托人

public class Client {

publicstaticvoidmain(String[] args) {

Light light = new Light();//光

AirConditioner airConditioner = new AirConditioner();//空调装置

WaterHeater waterHeater = new WaterHeater();//热水器

//接通开启

System.out.println("回家了!");

light.turnOn();

airConditioner.turnOn();

waterHeater.turnOn();

//关掉

System.out.println("出门了!");

light.turnOff();

airConditioner.turnOff();

waterHeater.turnOff();

}

}

/**

需求优化

加一个控制中心即可,定义了ControlCenterFacade类

*/

//控制中心外观

public class ControlCenterFacade {

//私人的

private Light light;//光

private AirConditioner airConditioner;//空调装置

private WaterHeater waterHeater;//热水器

public ControlCenterFacade() {

this.light = new Light();

this.airConditioner = new AirConditioner();

this.waterHeater = new WaterHeater();

}

//接通开启

publicvoidturnOn() {

light.turnOn();

airConditioner.turnOn();

waterHeater.turnOn();

}

//关掉

publicvoidturnOff() {

light.turnOff();

airConditioner.turnOff();

waterHeater.turnOff();

}

}

/**

该类在turnOn方法中调用了所有电器的打开方法,在turnOff中调用了所有电器的关闭方法。

这里的控制中心就是一个门面,你不用关系你有多少电器,也不用关心每个电器如何开启关闭。

你要做的,只是按下控制中心上的打开/关闭按钮。

*/

public class ClientV2 {

publicstaticvoidmain(String[] args) {

ControlCenterFacade controlCenterFacade = new ControlCenterFacade();

//接通开启

System.out.println("回家了!");

controlCenterFacade.turnOn();

//关掉

System.out.println("出门了!");

controlCenterFacade.turnOff();

}

}

//这就是门面模式

三、总结

门面模式比较简单,甚至称不上是一个设计模式。

是代码解耦的反面,提供了聚合层,如果豪宅中增加了新的电器,就需要修改控制中心类了。

方便上层的调用,使得上层代码逻辑更清晰。

谢谢!!!

你可能感兴趣的:(iOS 设计模式~门面模式 demo)