设计模式-外观模式模式
程序员文章站
2022-04-03 08:45:58
外观模式(结构型模式) 定义 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易试用。[DP] 外观模式简单点说,就是通过外观类把所有的子系统类进行组合,供外部调用。 这样既不暴露内部,也降低了耦合。对照下面这张图能很好的理解外 ......
外观模式(结构型模式)
- 定义
外观模式(facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易试用。[dp]
外观模式简单点说,就是通过外观类把所有的子系统类进行组合,供外部调用。
这样既不暴露内部,也降低了耦合。对照下面这张图能很好的理解外观模式(mvc三层架构就使用到了外观模式)
- 特点
- 子系统不被直接调用
- 外观类去组合所有的子系统类实现,供外部使用。
- 外观类需要知道所有子系统
- 结构
client:外部调用类,客户端类
facade:外观类
subsystem classes:子系统类
- 代码
例子:启动电脑时,会启动cpu、硬盘、显卡。现在电脑类作为外观类,cpu、硬盘、显卡类作为子系统类,使用电脑的人作为客户端。客户端只允许电脑开机和电脑关机,cpu、硬盘、显卡的启动和停止交给电脑类(外观类)。
子系统类集
/**
* @ author :fonxi
* @ date :2019/5/24 12:38
* @ description:cpu
*/
public class cpu {
public void start(){
system.out.println("cpu开始运行");
}
public void stop(){
system.out.println("cpu停止运行");
}
}
/**
* @ author :fonxi
* @ date :2019/5/24 12:45
* @ description:硬盘
*/
public class harddisk {
public void start(){
system.out.println("硬盘开始运行");
}
public void stop(){
system.out.println("硬盘停止运行");
}
}
/**
* @ author :fonxi
* @ date :2019/5/24 12:45
* @ description:显卡
*/
public class graphicscard {
public void start(){
system.out.println("显卡开始运行");
}
public void stop(){
system.out.println("显卡停止运行");
}
}
外观类
/**
* @ author :fonxi
* @ date :2019/5/24 12:34
* @ description:外观类 电脑类
*/
public class facade {
private cpu cpu;
private graphicscard graphicscard;
private harddisk harddisk;
public facade(){
cpu = new cpu();
graphicscard = new graphicscard();
harddisk = new harddisk();
}
//电脑开机
public void startingup(){
cpu.start();
graphicscard.start();
harddisk.start();
}
//电脑关机
public void shutdown(){
cpu.stop();
graphicscard.stop();
harddisk.stop();
}
}
客户端调用类
/**
* @ author :fonxi
* @ date :2019/5/24 12:33
* @ description:客户端调用类
*/
public class testcontroller {
public void print(){
facade facade = new facade();
system.out.println("开机");
facade.startingup();
system.out.println("关机");
facade.shutdown();
}
}
输出结果
开机
cpu开始运行
显卡开始运行
硬盘开始运行
关机
cpu停止运行
显卡停止运行
硬盘停止运行
很明显,客户端只进行了开关机,而子系统集的cpu、硬盘、显卡的启动和停止都是由外观类来完成的。
- 使用场景
- 当子系统类需要很高的安全性,需要隐藏,不被其他人访问时。
- 当子系统类外部使用起来特别复杂时
- 优缺点
优点:
- 内部隐藏,安全
- 内外部不直接访问,降低了耦合度
- 减少依赖,提高了灵活度
缺点:
- 违反开闭原则,外观类耦合,修改时麻烦
- 增加外观类,系统复杂性提升
- 总结
外观模式减少外部与内部的交互,使系统松散耦合,外部调用简便。
上一篇: day25-python之继承组合
下一篇: 李世民称帝之后 秦琼为什么会一直称病在家