设计模式:
外观模式(Facade Pattern)
简单介绍:
外观模式(Facade Pattern):
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。
比如调用子系统1和子系统2的Print方法,如果没有外观模式那么你需要一个个的调用,子系统如果是少还好,多了就要疯了,这里就可以使用外观模式,调用外观模式对外提供的方法一次性完成对子系统的层层调用
生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。
外观模式组成:
Facade:负责子系统的的封装调用
Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务
外观模式类图:
外观模式C#代码举例:
SubSystem1:子系统1
/// <summary>
/// 子系统1
/// </summary>
public class SubSystem1
{
public void Print1()
{
Console.WriteLine("SubSystem1");
}
}
SubSystem2:子系统2类
/// <summary>
/// 子系统2
/// </summary>
public class SubSystem2
{
/// <summary>
/// 子系统2
/// </summary>
public void Print2()
{
Console.WriteLine("SybSystem2");
}
}
Facade:外观模式对外提供接口类
/// <summary>
/// 外观模式对外接口类
/// </summary>
public class Facade
{
private SubSystem1 _subSystem1;
private SubSystem2 _subSystem2;
public Facade()
{
_subSystem1 = new SubSystem1();
_subSystem2 = new SubSystem2();
}
public void Print()
{
_subSystem1.Print1();
_subSystem2.Print2();
}
}
用户测试类:
/// <summary>
/// 客户端测试类
/// </summary>
class Client
{
static void Main(string[] args)
{
Facade facade = new Facade();
facade.Print();
Console.Read();
}
}
运行结果:
外观模式生活实例笔记本例子:
生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。
假设笔记本是由来个子系统:显示器和主机组成
当按下电源按钮,开启主机和显示器
外观模式生活实例笔记本例子类图:
外观模式生活实例笔记本例子C#代码:
PC_Monitor:笔记本显示器类
/// <summary>
/// 笔记本显示器
/// </summary>
public class PC_Monitor
{
public void Open()
{
Console.WriteLine("开启显示器");
}
public void Close()
{
Console.WriteLine("关闭显示器");
}
}
PC_Host:笔记本主机类
/// <summary>
/// 笔记本主机
/// </summary>
public class PC_Host
{
public void Open()
{
Console.WriteLine("开启主机");
}
public void Close()
{
Console.WriteLine("关闭主机");
}
}
PC_Facade:笔记本外观模式对外接口类
/// <summary>
/// 笔记本对外接口类
/// </summary>
public class PC_Facade
{
private PC_Monitor _PC_Monitor;
private PC_Host _PC_Host;
public PC_Facade()
{
_PC_Monitor = new PC_Monitor();
_PC_Host = new PC_Host();
}
public void Open()
{
Console.WriteLine("开机……");
_PC_Monitor.Open();
_PC_Host.Open();
}
public void Close()
{
Console.WriteLine("关机……");
_PC_Host.Close();
_PC_Monitor.Close();
}
}
用户测试代码:
class Client
{
/// <summary>
/// 用户测试类
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
PC_Facade pc_facade = new PC_Facade();
//开机
pc_facade.Open();
//关机
pc_facade.Close();
Console.Read();
}
}
运行结果:
外观模式C#工程源码下载