Design Patterns之Facade Pattern总结
首先,Façade模式的作用是什么?简化接口。比如我们买电脑,当电脑店店员把机子组装好后交给我们,我们拿回家把显示器键盘等的插头都插到机箱后面,然后用电脑时只要按一下主机箱上的电源,电脑就启动了,我们无需关心机箱内部各个部件是如何启动,是CPU先过电还是硬盘先过电。在这里,这个机箱就可以认为是一个Façade,这个Façade(机箱)就使启动电脑变得很容易,就算是一个完全不懂电脑的人,也知道如何启动电脑了。这就是Façade最大作用所在:简化接口,使得客户程序(人)更方便地使用子系统(电脑)。试想,如果没有机箱,那我们想启动电脑岂不是得去记先启动CPU还是先启动硬盘?要怎么启动它们?同时,Façade也让系统耦合度更低,因为你不需要直接跟CPU、硬盘等直接接触了。
接下来就用代码示例一下:
下面是几个电脑配件类,它们都有一个Run()方法和一个Stop()方法,分别表示它们的启动和关闭:
//CPU
internal class CPU {
public void Run() {
Console.WriteLine("Cpu is running...");
}
public void Stop() {
Console.WriteLine("Cpu stopped.");
}
}
//主板
internal class MainBoard {
public void Run() {
Console.WriteLine("MainBoard is running...");
}
public void Stop() {
Console.WriteLine("MainBoard stopped.");
}
}
//硬盘
internal class HardDisk {
public void Run() {
Console.WriteLine("HardDisk is running...");
}
public void Stop() {
Console.WriteLine("HardDisk stopped.");
}
}
//内存
internal class Memory {
public void Run() {
Console.WriteLine("Memory is running...");
}
public void Stop() {
Console.WriteLine("Memory stopped.");
}
}
//电源
internal class Power {
public void Run() {
Console.WriteLine("Power is running...");
}
public void Stop() {
Console.WriteLine("Power stopped");
}
}
然后是个主机类(Facade):
/// <summary>
/// 电脑主机(Façade(外观)类)
/// </summary>
public class HostComputerFacade {
private CPU cpu;
private MainBoard mainBoard;
private HardDisk hardDisk;
private Memory memory;
private Power power;
//构造方法,初始化各个配件
public HostComputerFacade() {
cpu = new CPU();
mainBoard = new MainBoard();
hardDisk = new HardDisk();
memory = new Memory();
power = new Power();
}
//启动电脑,我不知道各配件的启动顺序如何,我们不妨假设它们就按如下顺序启动
public void TurnOn() {
power.Run();
mainBoard.Run();
cpu.Run();
memory.Run();
hardDisk.Run();
}
//关闭电脑
public void ShutDown() {
hardDisk.Stop();
memory.Stop();
cpu.Stop();
mainBoard.Stop();
power.Stop();
}
}
然后我们就可以在Main()方法中使用“电脑”了:
public static void Main(string[] args) {
HostComputerFacade hcf = new HostComputerFacade();
hcf.TurnOn();
//…这里做一些使用电脑的操作
hcf.ShutDown();
}
Look,客户程序要是想“使用电脑”的话,只要实例化主机,然后按下电源开关(TurnOn()),相箱内各部件就自动按顺序启动了,再长按电源开关几秒钟(ShutDown()),机箱内各部件就按顺序停止了,而如果没有这个HostComputerFacade类的话,我们就要亲自动手让Power启动、再让MainBoard启动,然后再让CPU启动…,关的时候也要先让HardDisk停止,再让Memory停止…,那岂不太麻烦了,对吧?
总 结:
Facade模式的作用就在于简化接口,同时更松耦合,而各个子系统之间一般是联系比较紧的,就像机箱内的各配件,在某种意义上说,它们之间的联系是挺紧的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架