zoukankan      html  css  js  c++  java
  • C#

    钩子模式

    问题场景

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

    总结模式

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

    示例代码

    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# - 设计模式目录

  • 相关阅读:
    rpc
    route
    ROLLBACK
    rmdir -删除空目录
    rm
    rlogin
    REVOKE
    resolver
    RESET
    repquota
  • 原文地址:https://www.cnblogs.com/myrocknroll/p/8597342.html
Copyright © 2011-2022 走看看