zoukankan      html  css  js  c++  java
  • 设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

    一、什么是模板方法模式

    Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。

    二、模板方法模式的应用场景

    Template Method模式一般应用在具有以下条件的应用中:

    - 具有统一的操作步骤或操作过程

    - 具有不同的操作细节

    - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

     private static void Main(string[] args)
            {
    
                MakeCar bus = new MakeBus();
                bus.Make();
                MakeCar jeep = new MakeJeep();
                jeep.Make();
                Console.ReadLine();
            }
    
            public abstract class MakeCar
            {
                /// <summary>
                /// 组装车头
                /// </summary>
                public abstract void MakeHead();
    
                /// <summary>
                /// 组装车身
                /// </summary>
                public abstract void MakeBody();
    
                /// <summary>
                /// 组装车尾
                /// </summary>
                public abstract void MakeFoot();
    
                /// <summary>
                /// 模板方法
                /// </summary>
                public  void Make()
                {
                    MakeHead();
                    MakeBody();
                    MakeFoot();
                }
            }
    
            public class MakeBus : MakeCar
            {
                public override void MakeHead()
                {
                    Console.WriteLine("组装bus车头");
                }
                
    
                public override void MakeBody()
                {
                    Console.WriteLine("组装bus车身");
                }
    
                public override void MakeFoot()
                {
                    Console.WriteLine("组装bus车尾");
                }
            }
            public class MakeJeep : MakeCar
            {
                public override void MakeHead()
                {
                    Console.WriteLine("组装jeep车头");
                }
    
                public override void MakeBody()
                {
                    Console.WriteLine("组装jeep车身");
                }
    
                public override void MakeFoot()
                {
                    Console.WriteLine("组装jeep车尾");
                }
            }

    .NET 中的Template Method模式

    .NET Framework中Template Method模式的使用可以说是无处不在,比如说我们需要自定义一个文本控件,会让它继承于RichTextBox,并重写其中部分事件,如下例所示:

    public class MyRichTextBox : RichTextBox
    
    {
    
        private static bool m_bPaint = true;
    
        private string m_strLine = "";
    
        private int m_nContentLength = 0;
    
        private int m_nLineLength = 0;
    
        private int m_nLineStart = 0;
    
        private int m_nLineEnd = 0;
    
        private string m_strKeywords = "";
    
        private int m_nCurSelection = 0;
    
    
        protected override void OnSelectionChanged(EventArgs e)
    
        {
            m_nContentLength = this.TextLength;
    
            int nCurrentSelectionStart = SelectionStart;
    
            int nCurrentSelectionLength = SelectionLength;
    
            m_bPaint = false;
    
            m_nLineStart = nCurrentSelectionStart;
    
            while ((m_nLineStart > 0) && (Text[m_nLineStart - 1] != ',')&& (Text[m_nLineStart - 1] != '{')&& (Text[m_nLineStart - 1] != '('))
    
                m_nLineStart--;
    
            m_nLineEnd = nCurrentSelectionStart;
    
            while ((m_nLineEnd < Text.Length) && (Text[m_nLineEnd] != ',')&& (Text[m_nLineEnd] != '}')&& (Text[m_nLineEnd] != ')')&& (Text[m_nLineEnd] != '{'))
    
                m_nLineEnd++;
    
    
            m_nLineLength = m_nLineEnd - m_nLineStart;
    
            m_strLine = Text.Substring(m_nLineStart, m_nLineLength);
    
            this.SelectionStart = m_nLineStart;
    
            this.SelectionLength = m_nLineLength;
    
    
            m_bPaint = true;
    
        }
    
        protected override void OnTextChanged(EventArgs e)
    
        {
            // 重写OnTextChanged
        }
    }

    其中OnSelectionChanged()和OnTextChanged()便是Template Method模式中的基本方法之一,也就是子步骤方法,它们的调用已经在RichTextBox中实现了。

     

    参考:http://terrylee.cnblogs.com/archive/2006/07/04/DesignPattern_TemplateMethod.html

  • 相关阅读:
    finereport 文档
    FineRport 工作用
    SQL 排序
    fineReport
    python | Mysql 索引优化分析
    python | 缓存穿透、缓存雪崩和缓存击穿面试题
    python | Jenkins构建Spring Boot 详细步骤
    python | MySQL全面查询的正则匹配
    python | TCP 三次握手和四次挥手图解(有限状态机)
    python | 3款工具实现快速K8S开发
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3835761.html
Copyright © 2011-2022 走看看