• 模版模式


     

    模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现,这可能会让我们想到策略模式,两者有着本质的区别。

    何时能用到它?

    我们看一下策略模式的应用场景

    1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
    2、 需要在不同情况下使用不同的策略(算法),一般会定义一个接口规范,使用不同的策略方式去实现它
    3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
    而模版方法模式的应用场景
    1、多个类区别在于主流程中的某个细节
    2、客户可以自已实现模版里的抽象方法
    3、对客户隐藏具体的实现流程(方法的组合的顺序)

    模版模式的结构图

     

    模版模式实现说明

    OrderGenerator:模版模式基类,实现了某种业务的完整流程,其中一些核心方法已经实现,一些个性化方法被声明为抽象方法,让子类去实现。
    B2COrderGenerator:B2C业务中去实现抽象方法
    C2COrderGenerator:C2C业务中去实现抽象方法

    模版模式的C#实现

    复制代码
     /// <summary>
        /// 模版核心类
        /// </summary>
        abstract class OrderGenerator
        {
            /// <summary>
            /// 核心处理流程
            /// </summary>
            public void Excute()
            {
                InsertData();
                ProcessException();
                InsertLog();
            }
            void InsertData()
            {
                Console.WriteLine("写数据对外面隐藏");
            }
            void InsertLog()
            {
                Console.WriteLine("写日志对外面隐藏");
            }
            /// <summary>
            /// 异常处理逻辑,对外面开放,可以自己建立自己的异常规范
            /// </summary>
            protected abstract void ProcessException();
        }
    
        /// <summary>
        /// b2c项目业务处理方法
        /// </summary>
        class B2COrderGenerator : OrderGenerator
        {
            protected override void ProcessException()
            {
                Console.WriteLine("b2c项目中订单的异常处理方式");
            }
        }
        /// <summary>
        /// c2c项目业务处理方法
        /// </summary>
        class C2COrderGenerator : OrderGenerator
        {
            protected override void ProcessException()
            {
                Console.WriteLine("c2c项目中订单的异常处理方法");
            }
        }
    复制代码

    调用方法

           #region 模版方法调用
                OrderGenerator orderGenerator = new B2COrderGenerator();
                orderGenerator.Excute();
                #endregion

    程序截图

  • 相关阅读:
    第二次作业
    第一次作业
    新博客用户·
    李秋红130705010066
    李秋红130705010066
    李秋红130705010066
    李秋红130705010066
    李秋红130705010066
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/zyy1688/p/10002512.html
Copyright © 2020-2023  润新知