外观模式 / 过程模式
基本介绍
1.外观模式,又称过程模式
2.原理:定义了一个高层接口,为子系统中的一组接口提供一个一致的接口(外观类),用以屏蔽内部子系统的细节,使得调用端只需调用高层接口,无需关心这个子系统的内部细节
角色
1.外观类(Facade):为调用端提供统一的调用接口,外观类知道不同子系统负责处理何种请求,从而将调用端不同请求代理给适当的子系统对象
2.客户端:外观接口的调用者
3.子系统集合:指模块或者子系统,处理 Facade 对象指派的任务,是功能的实际提供者
事项
1.外观类、子系统都是具体类
2.外观类中组合多个子系统,两者非继承关系
3.优点
(1)对外屏蔽了子系统的细节,降低了客户端对子系统使用的复杂性,提高了安全性
(2)对客户端与子系统进行解耦,减少系统相互依赖,让子系统内部的模块更易维护和扩展,提高灵活性
(3)通过合理的使用外观模式,可以更好地划分访问的层次
4.应用场景
(1)子系统较复杂,系统需要进行分层设计,提供外界访问的模块;子系统较简单时,直接调用即可,无需外观模式
(2)维护一个遗留的大型系统时,可能该系统已经变得非常难以维护和扩展,为新系统开发 Facade,Facade 保留旧系统的可用方法,由新系统调用 Facade
外观模式、命令模式
1.外观模式
(1)简化操作,封装内部,不符合开闭原则,新增需要修改外观类
(2)外观模式无法穿透外观类(或接口)去细粒度的控制内部的执行顺序或某些特殊的逻辑,像只有一个按钮的遥控器,这一个按钮执行多个设定好顺序的开关操作,并且中间不能撤回
2.命令模式
(1)对命令调用者和命令执行者进行解耦,符合开闭原则
(2)命令模式能细粒度的控制每个按钮的执行顺序,像一个多按钮的遥控器,每个按钮是一个命令,使用某些按钮进行开关操作,还支持等待执行、执行撤回等操作
代码示例
public class Facade {//客户端
public static void main(String[] args) {
Theater theater = new Theater();
theater.play();
theater.end();
}
}
class Theater {//外观类
private Screen screen;
private Player player;
private Stereo stereo;
public Theater() {
this.screen = Screen.getScreen();
this.player = Player.getPlayer();
this.stereo = Stereo.getStereo();
}
public void play() {
screen.down();
player.start();
stereo.start();
}
public void end() {
screen.up();
player.end();
stereo.end();
}
}
class Screen {//子系统
//饿汉式(静态常量)
private static final Screen SCREEN = new Screen();
private Screen() {
}
public static Screen getScreen() {
return SCREEN;
}
public void down() {
System.out.println("降下屏幕");
}
public void up() {
System.out.println("升起屏幕");
}
}
class Player {//子系统
//饿汉式(静态常量)
private static final Player PLAYER = new Player();
private Player() {
}
public static Player getPlayer() {
return PLAYER;
}
public void start() {
System.out.println("播放视频");
}
public void end() {
System.out.println("停止视频");
}
}
class Stereo {//子系统
//饿汉式(静态常量)
private static final Stereo STEREO = new Stereo();
private Stereo() {
}
public static Stereo getStereo() {
return STEREO;
}
public void start() {
System.out.println("播放音频");
}
public void end() {
System.out.println("停止音频");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体