Template Pattern

问题:

许多含有相同步骤 但又细节不用的类

所以:

讲相同的步骤 抽象为基类, 子类覆盖那些细节不同的方法

public abstract Base()
{
    void Start()
    {
        A();
        B();
        C();
    }

    void A()
    {
        Console.WriteLine("A");
    }

    abstract void B();

    void C()
    {
        Console.WriteLine("C");
    }
}
public class ChildA : Base
{
    override void B()
    {
        Console.WriteLine("ChildA.B");
    }    
}
public class ChildB : Base
{
    override void B()
    {
        Console.WriteLine("ChildB.B");
    }    
}
public class ChildC : Base
{
    override void B()
    {
        Console.WriteLine("ChildC.B");
    }    
}

 

问题:

假设某些基类不需要其中的某些步骤

所以:

使用 "钩子" 方法,  钩子 (可以返回bool) 来决定是否在基类中实现

public abstract Base()
{

    void Start()
    {
        A();
        B();
        if(hook())
        {
            C();
        }
    }

    void A()
    {
        Console.WriteLine("A");
    }

    abstract void B();

    void C()
    {
        Console.WriteLine("C");
    }

    bool hook()
    {
        return true;
    }
}
public class ChildA : Base
{
    override void B()
    {
        Console.WriteLine("ChildA.B");
    }    

    override bool hook()
    {
        return false;
    }
}
public class ChildB : Base
{
    override void B()
    {
        Console.WriteLine("ChildB.B");
    }    
}
posted @ 2015-11-27 21:00  `Laimic  阅读(93)  评论(0)    收藏  举报