设计模式外观模式(FacadePattern)
核心模块:外观角色,子系统角色所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git使用场景:有很多复杂的子系统,为客户提供一个简单的入口;优点:客户并不需要各个子系统如何协同工作,减少客户和子系统的耦合;缺点:不能很好的控制客户和子系统的交互;注意:1,与模版方法模式区别:模版方法模
·
核心模块:外观角色,子系统角色
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:有很多复杂的子系统,为客户提供一个简单的入口;
优点:客户并不需要各个子系统如何协同工作,减少客户和子系统的耦合;
缺点:不能很好的控制客户和子系统的交互;
注意:
1,与模版方法模式区别:模版方法模式里面内敛的是算法到父类,而不是外观模式中子类方法的集合
/**
* Created by tory on 2018/1/4.
* 外观模式,简而言之,就只将几个类聚合之,一步处理;
* 核心模块:Facade外观角色,SubSystem子系统角色;
* 与模版方法模式的区别:模版方法模式里面抽象模版类是算法的内敛到父类,而不是子类方法调用的集合
*/
public class FacadePattern {
public static void main(String[] args) {
//这里模仿智能家居
Door door = new Door();
Light light = new Light();
BathRoom bath = new BathRoom();
Television tv = new Television();
SmartHomeFacade facade = new SmartHomeFacade(door, light, bath, tv);
facade.comeHome();
facade.watchTV();
facade.sleep();
}
}
//SubSystem 自动门子类
class Door {
void open() {
System.out.println("open the door...");
}
void close() {
System.out.println("close the door...");
}
}
//SubSystem 智能灯子类
class Light {
void on() {
System.out.println("light the room...");
}
void off() {
System.out.println("dark the room...");
}
}
//SubSystem 恒温水系统子类
class BathRoom {
void on() {
System.out.println("浴室开始烧热水...");
}
void off() {
System.out.println("浴室停止烧热水...");
}
}
//SubSystem 智能电视子类
class Television {
void powerOn() {
System.out.println("打开电视...");
}
void powerOff() {
System.out.println("关闭电视...");
}
}
//Facade 外观角色类
class SmartHomeFacade {
//智能家居类,子类设置为private,对用户屏蔽细节
private Door door;
private Light light;
private BathRoom bathRoom;
private Television tv;
SmartHomeFacade(Door door, Light light, BathRoom bath, Television tv) {
this.door = door;
this.light = light;
this.bathRoom = bath;
this.tv = tv;
}
void comeHome() {
door.open();
bathRoom.on();
}
void watchTV() {
light.on();
tv.powerOn();
}
void sleep() {
door.close();
bathRoom.off();
tv.powerOff();
light.off();
}
}
内容打印
Hello World!
open the door...
浴室开始烧热水...
light the room...
打开电视...
close the door...
浴室停止烧热水...
关闭电视...
dark the room...
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)