外观模式
概述
在大多数情况下,网站都会提供一个网站首页作为入口,提供通往各个子栏目的超链接。用户只需记住网站首页网站 URL,而无须记住每个子栏目的网址
同理,用户与系统的交互可以通过一个外观对象进行,提供实现各种功能的子系统接口
模式实例
一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭,使用外观模式设计该系统
子系统类 Light
public class Light {
private String position;
public Light(String position) {
this.position = position;
}
public void on() {
System.out.println(this.position + "灯打开");
}
public void off() {
System.out.println(this.position + "灯打开");
}
}
子系统类 Fan
public class Fan {
public void on() {
System.out.println("风扇打开");
}
public void off() {
System.out.println("风扇关闭");
}
}
子系统类 AirConditioner
public class AirConditioner {
public void on() {
System.out.println("空调打开");
}
public void off() {
System.out.println("空调关闭");
}
}
子系统类 Televison
public class Television {
public void on() {
System.out.println("电视机打开");
}
public void off() {
System.out.println("电视机关闭");
}
}
外观类 GeneralSwitchFacade
public class GeneralSwitchFacade {
private Light[] lights = new Light[4];
private Fan fan;
private AirConditioner ac;
private Television tv;
public GeneralSwitchFacade() {
lights[0] = new Light("左前");
lights[1] = new Light("右前");
lights[2] = new Light("左后");
lights[3] = new Light("右后");
fan = new Fan();
ac = new AirConditioner();
tv = new Television();
}
public void on() {
lights[0].on();
lights[1].on();
lights[2].on();
lights[3].on();
fan.on();
ac.on();
tv.on();
}
public void off() {
lights[0].off();
lights[1].off();
lights[2].off();
lights[3].off();
fan.off();
ac.off();
tv.off();
}
public void fanOn() {
fan.on();
}
...
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战