C# - 设计模式 - 钩子模式

2021-04-21 02:26

阅读:495

钩子模式

问题场景

如何控制抽象类的行为?解决办法是靠钩子!抽象类公布一个虚方法,由子类自行决定是否重写它,抽象类以钩子做判定,如果返回真则执行某个方法,否则不执行。为什么钩子不能是抽象的,因为如果钩子是抽象的,那么子类都必须重写它,有些子类并不想重写它,所以钩子最好定义成虚的。

总结模式

抽象类中的钩子可以控制抽象类的算法流程

示例代码

public abstract class Drink
{
    public void GetDrink( )
    {
        if (IsAddLemo( ))
        {
            Console.WriteLine( "你的加柠檬的饮料做好了" );
        }
        else
        {
            Console.WriteLine( "你的饮料做好了" );
        }
    }
    //钩子方法,默认不加柠檬
    public virtual bool IsAddLemo( )
    {
        return false;
    }
}

public class Coffe : Drink
{

}

public class Tea : Drink
{
    public override bool IsAddLemo( )
    {
        return true;
    }
}

public class Programe
{
    static void Main( string[] args )
    {
        Drink coffe = new Coffe( );
        coffe.GetDrink( );

        Drink tea = new Tea( );
        tea.GetDrink( );
    }
}

  

C# - 设计模式目录


评论


亲,登录后才可以留言!