当前位置: 首页 > news >正文

C#模板方法模式

模板方法模式是通过把不变行为搬移到超类,而超类一定会定义为虚类虚方法,虚方法在每个子类中重写,去除子类中的重复代码来体现它的优势。

通用模式样例代码为:

复制代码
 1 /*
 2  * Created by SharpDevelop.
 3  * User: home
 4  * Date: 2013/4/24
 5  * Time: 21:42
 6  * 
 7  * To change this template use Tools | Options | Coding | Edit Standard Headers.
 8  */
 9 using System;
10 
11 namespace template
12 {
13     abstract class AbstractClass
14     {
15         public abstract void PrimitiveOperation1();
16         public abstract void PrimitiveOperation2();
17         
18         public void TemplateMethod()
19         {
20             PrimitiveOperation1();
21             PrimitiveOperation2();
22             Console.WriteLine("");
23         }
24     }
25     
26     class ConcreteClassA : AbstractClass
27     {
28         public override void PrimitiveOperation1()
29         {
30             Console.WriteLine("具体类A方法1实现。");
31         }
32         public override void PrimitiveOperation2()
33         {
34             Console.WriteLine("具体类A方法2实现。");
35         }
36     }
37     
38     class ConcreteClassB : AbstractClass
39     {
40         public override void PrimitiveOperation1()
41         {
42             Console.WriteLine("具体类B方法1实现。");
43         }
44         public override void PrimitiveOperation2()
45         {
46             Console.WriteLine("具体类B方法2实现。");
47         }
48     }
49     
50     class Program
51     {
52         public static void Main(string[] args)
53         {
54             AbstractClass c;
55             
56             c = new ConcreteClassA();
57             c.TemplateMethod();
58             
59             c = new ConcreteClassB();
60             c.TemplateMethod();
61             
62             Console.Read();
63         }
64     }
65 }
复制代码

相关文章:

  • 【设计模式】快速理解原型模式,及其在源码中的应用
  • 从零开始学React(3)——数组
  • 大数据场景下的消息队列:Kafka3.0快速入门
  • 4月4日作业
  • Kafka生产者是如何发送消息的?
  • 如何使用SpringBoot写一个属于自己的Starter
  • C# 常用正责表达式
  • 【设计模式】快速理解建造者模式,及其在JDK源码中的应用
  • RMQ
  • 简单聊聊MySQL中的六种日志
  • 网络 基于TCP协议socket编程
  • 最实用的设计模式:策略模式的快速理解
  • Spark算子实战Java版,学到了
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 【设计模式】快速理解装饰者模式,及其在JDK源码中的应用
  • __proto__ 和 prototype的关系
  • Codepen 每日精选(2018-3-25)
  • docker-consul
  • FineReport中如何实现自动滚屏效果
  • Java Agent 学习笔记
  • Java 最常见的 200+ 面试题:面试必备
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue.js框架原理浅析
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Zepto.js源码学习之二
  • 测试开发系类之接口自动化测试
  • 初识MongoDB分片
  • 搭建gitbook 和 访问权限认证
  • 读懂package.json -- 依赖管理
  • 对象管理器(defineProperty)学习笔记
  • 复习Javascript专题(四):js中的深浅拷贝
  • 给初学者:JavaScript 中数组操作注意点
  • 关于List、List?、ListObject的区别
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 你不可错过的前端面试题(一)
  • 如何解决微信端直接跳WAP端
  • 手机端车牌号码键盘的vue组件
  • 用mpvue开发微信小程序
  • C# - 为值类型重定义相等性
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (+4)2.2UML建模图
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (剑指Offer)面试题34:丑数
  • (五)Python 垃圾回收机制
  • (学习日记)2024.01.09
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • **CI中自动类加载的用法总结
  • .NET CORE Aws S3 使用
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net mvc部分视图
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET与 java通用的3DES加密解密方法
  • @GlobalLock注解作用与原理解析