博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说设计模式~ 模版模式(Template)
阅读量:6470 次
发布时间:2019-06-23

本文共 1646 字,大约阅读时间需要 5 分钟。

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

何时能用到它?

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

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

模版模式的结构图

 

模版模式实现说明

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

模版模式的C#实现

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

调用方法

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

程序截图

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
存储过程报错行提示
查看>>
Leetcode 4 - median-of-two-sorted-arrays
查看>>
修改OBS为仅直播音频
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
CKEditor的使用-编辑文本
查看>>
puppet来管理文件和软件包
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>
ClickStat业务
查看>>
DMA32映射问题
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
Android快速开发常用知识点系列目录
查看>>
最容易理解的对卷积(convolution)的解释
查看>>
《机器学习实战》知识点笔记目录
查看>>
完美解决NC502手工sql的查询引擎排序及合计问题
查看>>
windows 7/mac编译cocos2d-x-3.2*的android工程报错
查看>>