场景说明:
外观模式(Facade)的目的是提供一个接口,通过这个接口可以使一个子系统更容易使用。子系统可能有很多接口
或者访问类,使用外观模式抽象出来共有的对其做一个组合封装。
类图:

代码:
namespace Facade
{
/**//// <summary>
/// 子系统一,该子系统仅含有一个类
/// </summary>
public class DrawLine
{
private int _point;
/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="point">画线的数量</param>
public DrawLine(int point)
{
this._point = point;
}
/**//// <summary>
/// 画下划线
/// </summary>
public void DrawUnderline()
{
for (int i = 0; i < _point; i++)
{
Console.WriteLine("_");
}
}
/**//// <summary>
/// 画中划线
/// </summary>
public void DrawMiddleline()
...{
for (int i = 0; i < _point; i++)
...{
Console.WriteLine("--");
}
}
}
/**//// <summary>
/// 子系统二,该子系统也仅含有一个类
/// </summary>
public class ShowData
{
private string _defaultValue;
/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="defaultValue">默认值</param>
public ShowData(string defaultValue)
{
this._defaultValue = defaultValue;
}
/**//// <summary>
/// 显示详细的数据
/// </summary>
/// <param name="time">参数一</param>
/// <param name="outsideValue">参数二</param>
public void ShowParticularData(int time, string outsideValue)
{
for (int i = 0; i < time; i++)
{
Console.WriteLine(outsideValue);
Console.WriteLine("|");
}
Console.WriteLine(" ");
}
/**//// <summary>
/// 显示简单的数据
/// </summary>
/// <param name="outsideValue"></param>
public void ShowShortData(string outsideValue)
{
Console.WriteLine(_defaultValue + ":" + outsideValue);
}
}
//使用外观模式,向外提供各个子系统的功能
public class Facade
{
private int _times;
private string _defaultValue;
private DrawLine dl;
private ShowData sd;
public Facade(int times, string defaultValue)
{
_times = times;
_defaultValue = defaultValue;
dl = new DrawLine(_times);
sd = new ShowData(_defaultValue);
}
/**//// <summary>
/// 完成任务一:画下划线,显示详细的数据
/// </summary>
public void DrawPicture()
{
dl.DrawUnderline();
sd.ShowParticularData(_times, _defaultValue);
}
/**//// <summary>
/// 完成任务二:画中划线,显示简单的数据
/// </summary>
public void DrawImage()
{
dl.DrawMiddleline();
sd.ShowShortData(_defaultValue);
}
}
//// <summary>
/// 客户类
/// </summary>
public class Client
{
private const int _times = 10;
private const string _defaultValue = "默认值";
static void Main(string[] args)
{
//---------- 非使用Facade模式时,常见的用法--------------------
Console.WriteLine("非使用Facade模式时,常见的用法. ");
DrawLine dl = new DrawLine(_times);
ShowData sd = new ShowData(_defaultValue);
dl.DrawUnderline();
dl.DrawMiddleline();
sd.ShowParticularData(_times, _defaultValue);
sd.ShowShortData(_defaultValue);
//-------------------结束--------------------------------------
//---------- 使用Facade模式的用法--------------------
Console.WriteLine(" 使用Facade模式的用法. ");
Facade fc = new Facade(_times, _defaultValue);
fc.DrawPicture();
fc.DrawImage();
//-------------------结束--------------------------------------
}
}
}
浙公网安备 33010602011771号