Lij*_*raj 0 c# design-patterns facade template-method-pattern
Facade 和 Template 方法模式有什么区别?它们都提供子系统的高级视图并对用户隐藏它。
外观图案
internal class SubsystemA
{
internal string A1()
{
return "Subsystem A, Method A1\n";
}
internal string A2()
{
return "Subsystem A, Method A2\n";
}
}
internal class SubsystemB
{
internal string B1()
{
return "Subsystem B, Method B1\n";
}
}
internal class SubsystemC
{
internal string C1()
{
return "Subsystem C, Method C1\n";
}
}
public static class Facade
{
static SubsystemA a = new SubsystemA();
static SubsystemB b = new SubsystemB();
static SubsystemC c = new SubsystemC();
public static void Operation1()
{
Console.WriteLine("Operation 1\n" +
a.A1() +
a.A2() +
b.B1());
}
public static void Operation2()
{
Console.WriteLine("Operation 2\n" +
b.B1() +
c.C1());
}
}
// ============= Different compilation
// Compile with csc /r:FacadeLib.dll Facade-Main.cs
class Client
{
static void Main()
{
Facade.Operation1();
Facade.Operation2();
}
}
Run Code Online (Sandbox Code Playgroud)
模板模式
interface IPrimitives
{
string Operation1();
string Operation2();
}
class Algorithm
{
public void TemplateMethod(IPrimitives a)
{
string s =
a.Operation1() +
a.Operation2();
Console.WriteLine(s);
}
}
class ClassA : IPrimitives
{
public string Operation1()
{
return "ClassA:Op1 ";
}
public string Operation2()
{
return "ClassA:Op2 ";
}
}
class ClassB : IPrimitives
{
public string Operation1()
{
return "ClassB:Op1 ";
}
public string Operation2()
{
return "ClassB.Op2 ";
}
}
class TemplateMethodPattern
{
static void Main()
{
Algorithm m = new Algorithm();
m.TemplateMethod(new ClassA());
m.TemplateMethod(new ClassB());
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子取自O'Reilly 设计模式
在上面提供的示例中,外观和模板模式都实现了一个接口,并使用了抽象并定义了应该如何处理操作。我没有发现这两种模式之间有任何区别。任何人都可以帮助我理解它。
外观模式将通过在包装器方法下组合子功能来引入新功能。在这种情况下,外观类与子类具有不同的结构。
模板模式在基类中提供了算法的骨架,并为派生类提供了覆盖/实现该算法的某些单元的可能性。
在这种情况下,从模板派生的类与基类具有相同的结构。
| 归档时间: |
|
| 查看次数: |
1759 次 |
| 最近记录: |