设计模式(14) 模板方法模式

2020-08-03  本文已影响0人  zhixin9001

模板方法模式

模板方法模式是面向对象系统中非常朴实的一种模式,体现出面向对象设计中继承和多态的基本特征。在开发应用的过程中,往往会在初期规划一些较粗粒度的算法,而且对参与计算的对象进行抽象,明确算法会使用到哪些方法,每个方法可以提供哪些支持,但此时每个方法本身并没有细化;随着开发过程的展开,我们可能会具体实现每个方法,或者对最初的一些方法进行替换,覆盖上新的内容,这样就在一个相对固定的算法框架下,通过子类(或其他方法)的变化,实现了算法的差异性。

GOF对模板方法模式的描述为:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method let ssubclasses redefine certain steps of an algorithm without changing the algorithm's structure..
— Design Patterns : Elements of Reusable Object-Oriented Software

UML类图:

模板方法模式 UML类图

代码示例:

public abstract class Template
{
    public abstract void Init();
    public abstract void Start();
    public abstract void End();

    public void Process()
    {
        Init();
        Start();
        End();
    }
}

public class ConcreteProcessor1 : Template
{
    public override void End()
    {
        Console.WriteLine("Process1 End");
    }

    public override void Init()
    {
        Console.WriteLine("Process1 Init");
    }

    public override void Start()
    {
        Console.WriteLine("Process1 Start");
    }
}

public class ConcreteProcessor2 : Template
{
    public override void End()
    {
        Console.WriteLine("Process2 End");
    }

    public override void Init()
    {
        Console.WriteLine("Process2 Init");
    }

    public override void Start()
    {
        Console.WriteLine("Process2 Start");
    }        
}

适用场景

优点
1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

缺点
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

参考书籍:
王翔著 《设计模式——基于C#的工程化实现及扩展》

上一篇 下一篇

猜你喜欢

热点阅读