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

  • 相关阅读:
    python基础学习-无参装饰器
    python基础学习-day16==课后作业练习(函数对象和闭包)
    python基础学习-函数闭包
    python基础学习-函数对象与函数嵌套
    4.15作业
    反射、元类
    Mixins、多态、绑定方法与非绑定方法
    propety装饰器、继承
    封装
    4.8作业
  • 原文地址:https://www.cnblogs.com/myrocknroll/p/8597342.html
Copyright © 2011-2022 走看看