外观模式是一种结构型设计模式,用于为一组复杂的子系统提供一个简单的接口。它隐藏了子系统的复杂性,并向客户端提供了一个简单的接口,使得客户端可以与子系统交互,而不用了解其内部的复杂逻辑。
下面是C#中外观模式的代码实例:
代码语言:javascript复制// 定义一个子系统的接口
public interface ISubsystem
{
void Method1();
void Method2();
// ...
}
// 实现子系统接口的具体类
public class Subsystem1 : ISubsystem
{
public void Method1()
{
Console.WriteLine("调用 Subsystem1 的方法1");
}
public void Method2()
{
Console.WriteLine("调用 Subsystem1 的方法2");
}
}
public class Subsystem2 : ISubsystem
{
public void Method1()
{
Console.WriteLine("调用 Subsystem2 的方法1");
}
public void Method2()
{
Console.WriteLine("调用 Subsystem2 的方法2");
}
}
// 定义外观类,它实现了子系统的接口,并提供简单的方法给客户端
public class Facade
{
private readonly ISubsystem _subsystem1;
private readonly ISubsystem _subsystem2;
public Facade(ISubsystem subsystem1, ISubsystem subsystem2)
{
_subsystem1 = subsystem1;
_subsystem2 = subsystem2;
}
public void Method()
{
_subsystem1.Method1();
_subsystem1.Method2();
_subsystem2.Method1();
_subsystem2.Method2();
}
}
// 客户端只需要和外观类交互即可
class Client
{
static void Main()
{
var subsystem1 = new Subsystem1();
var subsystem2 = new Subsystem2();
var facade = new Facade(subsystem1, subsystem2);
facade.Method();
}
}
以上代码允许结果:
在这个示例中,`Subsystem1`和`Subsystem2`都实现了`ISubsystem`接口。而`Facade`类通过聚合这两个子系统类,封装了它们的复杂性,并提供了一个简单的方法,给客户端直接使用。客户端只需要和`Facade`类交互即可,而不需要知道子系统的复杂逻辑。
【小结】
外观模式,大家在开发过程中肯定会用到,但有时没有察觉到。它也是降低耦合的一种思路。