`

C#-->template method设计模式

阅读更多
意图

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

  场景

模版方法是非常容易理解的设计模式,一来是因为它没有过多结构上的交错,二来是因为这种代码复用技术对于掌握OO知识的人来说非常容易可以想到,很可能你已经在很多地方运用了模版方法。在运用一些设计模式的时候常常也会一起运用模版方法,甚至有的设计模式本身就带有模版方法的思想。

  今天,我们给出这样一个实际的例子。做过银行支付、支付宝支付的人都知道,一个支付的过程是基于两个接口的。提交接口和网关返回接口,虽然各大网关的支付接口格式不同,比如有的网关对于支付金额的参数是money,有的网关又是amount,但是从支付的提交过程来说,我们一般都会经历以下步骤:

  l         获取订单信息,验证订单的合法性

  l         生成用于提交到各大网关的表单

  l         记录日志

  l         把表单提交到相应的网关

  对于各个网关,生成的提交表单以及记录日志的方式是不一样的,但是整个支付流程以及流程中的获取订单信息、提交表单的过程是一样的。由此引入模版方法模式来复用不变的部分,把可变的部分留给子类去实现。
code:
using System;
using System.Collections.Generic;
using System.Text;
namespace TemplateMethodExample
{
    class Program
    {
        static void Main(string[] args)
        {
            PayGateway pg = new IPSGateway();
            pg.SubmitOrder(new Order());
        }
    }
   
    class Order
    {

    }

    class SubmitForm
    {

    }

    abstract class PayGateway
    {
        protected abstract void WriteLog(SubmitForm sf);
        protected abstract SubmitForm GenerateOrderForm(Order order);
        public void SubmitOrder(Order order)
        {
            if (order == null)
            {
                Console.WriteLine("Invalid Order");
                return;
            }
            SubmitForm sf = GenerateOrderForm(order);
            if (sf == null)
            {
                Console.WriteLine("Generate Submit Form Failed");
                return;
            }
            WriteLog(sf);
        }
    }

    class IPSGateway : PayGateway
    {
        protected override void WriteLog(SubmitForm sf)
        {
            Console.WriteLine("Log Wrote");
        }
        protected override SubmitForm GenerateOrderForm(Order order)
        {
            Console.WriteLine("Submit Form Generated");
            return new SubmitForm();
        }
    }
}
分享到:
评论

相关推荐

    C#设计模式-吕震宇

    设计模式(21)-Template Method Pattern 设计模式(20)-Visitor Pattern 设计模式(19)-Observer Pattern 设计模式(18)-Command Pattern 设计模式(17)-Chain of Responsibility Pattern 设计模式(16)...

    C#设计模式.PDF

    C#设计模式(5)-Factory Method Pattern 30 一、 工厂方法(Factory Method)模式 30 二、 Factory Method模式角色与结构: 30 三、 程序举例: 31 四、 工厂方法模式与简单工厂模式 33 五、 Factory Method模式...

    C#设计模式大全

    C#设计模式(5)-Factory Method Pattern 一、 工厂方法(Factory Method)模式 二、 Factory Method模式角色与结构: 三、 程序举例: 四、 工厂方法模式与简单工厂模式 五、 Factory Method模式演化 六、 ...

    C#设计模式_设计模式_C#_

    模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. ...

    C#版 24种设计模式

    工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    C#设计模式(23种设计模式)

    模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式...

    C#23种设计模式_示例源代码及PDF

    3、FACTORY METHOD —请 MM 去麦当劳吃汉堡,不同的 MM 有不同的口味,要每个都记住 、 是一件烦人的事情,我一般采用 Factory Method 模式,带着 MM 到服务员那儿,说“要一个 汉堡”,具体要什么样的汉堡呢,让 ...

    ASP.NET设计模式-杨明军译(源码)

    8.1.1 Factory Method设计模式 8.1.2 Service Locator 8.1.3 IoC容器 8.1.4 StructureMap 8.2 Model-View-Presenter 8.3 Front Controller 8.3.1 Command模式 8.3.2 Chain of Responsibility模式 8.4 Model...

    32种设计模式

    C# 32种设计模式:<br>创建型:<br> 1. 单件模式(Singleton Pattern) <br> 2. 抽象工厂(Abstract Factory) <br> 3. 建造者模式(Builder) <br> 4. 工厂方法模式(Factory Method) <br> 5. 原型模式(Prototype) <br>...

    C#23种设计模式

    │ │ └─C#设计模式(6)——原型模式(Prototype Patt O技术博客_files │ └─PrototypePattern │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties ├─07.Adapter...

    设计模式迷你手册.chm

    设计模式迷你手册.chm,大小仅 188 KB,图文并茂,介绍性强,每个设计模式附有 C++、C# 示例源码示例。 目录: 创建型 Factory Method Abstract Factory Builder Prototype Singleton 结构型 Adapter Bridge ...

    Head First设计模式中文版及示例源码

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...

    C#中的TemplateMethod模式问题分析

    大学的时候就开过一门课程,讲设计模式,可是大学生没什么编程实践经验,在大学里面听设计模式的感觉,就像听天书。听着都有道理,可是完全领会不到其中的奥妙,大抵原因就在于没有走过弯路,没有吃过设计不当的亏。...

    敏捷软件开发原则、模式与实践 C#版

    薪水支付案例研究 第21章 COMMAND模式和ACTIVE OBJECT模式:多功能与多任务 第22章 TEMPLATE METHOD模式和STRATEGY模式:继承和委托 第23章 FACADE模式和MEDIATOR模式 第24章 SINGLETON模式和MONOSTATE模式 第25章 ...

    设计模式手册 图表例子完全

    代码例子是C++和C#的 chm格式 一、创建型 FactoryMethod Abstract Factory Builder Prototype Singleton 二、结构型 Adapter_Class Adapter_Object Bridge 等等 ... Interpreter TemplateMethod等等

    asp.net知识库

    多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. ...

    23种设计模式 (创建型,结构型,行为型)

    模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式...

    二十三种设计模式【PDF版】

    设计模式之 Template(模板方法) 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式之 Strategy(策略) 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Chain of ...

Global site tag (gtag.js) - Google Analytics