借鉴于各路大神,也就不做链接了
class FacadePattern
{
/// <summary>
/// 子系统1
/// </summary>
public class System1
{
public void Method()
{
Console.WriteLine("System1.Method");
}
}
/// <summary>
/// 子系统2
/// </summary>
public class System2
{
public void Method()
{
Console.WriteLine("System2.Method");
}
}
/// <summary>
/// 子系统3
/// </summary>
public class System3
{
public void Method()
{
Console.WriteLine("System3.Method");
}
}
/// <summary>
/// 外观类
/// </summary>
public class Facade
{
private System1 system1;
private System2 system2;
private System3 system3;
public Facade()
{
system1 = new System1();
system2 = new System2();
system3 = new System3();
}
public void Method()//外观类中存在多种通过子系统完成的操作,我们不需要知道它怎么完成的,只管调用就好
{
system1.Method();
system2.Method();
system3.Method();
}
public void Method1()
{
system1.Method();
system3.Method();
}
}
//调用
//FacadePattern.Facade facade = new FacadePattern.Facade();
//facade.Method();
//然而问题来了,如果我觉得 子系统2 在某种情况下不好用,我又不能更换
//那我就再写一个 子系统4 代替这种情况下的 子系统2 ,然后在 外观类 中增加一个方法
//好像又篡改了别人的代码
//可以通过抽象外观类解决这个问题
//当需要大量重复使用某种操作的时候新建一个外观类继承于抽象外观类,重新“组装”一个方法供使用
//新增子系统可以不更改原代码
public abstract class AbstractFacade
{
public abstract void Method();
}
/// <summary>
/// 新建外观类 继承于抽象外观类,用 子系统4 代替 子系统2
/// </summary>
public class Facade1 : AbstractFacade
{
private System1 system1;
private System4 system4;
private System3 system3;
public Facade1()
{
system1 = new System1();
system4 = new System4();
system3 = new System3();
}
public override void Method()
{
system1.Method();
system4.Method();
system3.Method();
}
}
/// <summary>
/// 子系统4
/// </summary>
public class System4
{
public void Method()
{
Console.WriteLine("System4.Method");
}
}
//调用
//FacadePattern.Facade1 facade = new FacadePattern.Facade1();
//facade.Method();
}