首页 > 其他分享 >TemplateMethodPattern-模板方法模式

TemplateMethodPattern-模板方法模式

时间:2023-08-22 09:47:21浏览次数:36  
标签:Console TemplateMethodPattern void Excel 模式 protected CSV data 模板

在C#中,模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤延迟到子类中实现。模板方法模式通过将公共的算法步骤抽象到基类中,并且通过在基类中定义一个模板方法来调用这些步骤,从而实现代码的复用和灵活性。

模板方法模式有以下几个关键角色:

AbstractClass(抽象类):定义了一个算法的骨架,将算法的具体步骤抽象到独立的方法中,并在抽象类中定义一个模板方法来调用这些步骤。抽象类可以包含抽象方法、具体方法和钩子方法。

ConcreteClass(具体类):是抽象类的子类,实现了在抽象类中定义的抽象方法,完成具体的算法步骤。

Hook(钩子方法):在抽象类中定义的具体方法,它可以有默认的实现,但通常是空的或只提供基本的实现,并且由具体类来决定是否重写。

下面是一个示例,展示如何在C#中使用模板方法模式来实现一个简单的数据导入系统:

namespace TemplateMethodPattern_模板方法模式
{
    public class TemplateMethod
    {
        // AbstractClass
        public abstract class DataImporter
        {
            public void ImportData()
            {
                OpenFile();
                ParseData();
                ValidateData();
                TransformData();
                SaveData();
                CloseFile();
            }

            protected abstract void OpenFile();
            protected abstract void ParseData();
            protected abstract void ValidateData();
            protected abstract void TransformData();
            protected abstract void SaveData();
            protected abstract void CloseFile();
        }

        // ConcreteClass
        public class ExcelImporter : DataImporter
        {
            protected override void OpenFile()
            {
                Console.WriteLine("Opening Excel file");
                // 实际的打开Excel文件的逻辑
            }
            protected override void ParseData()
            {
                Console.WriteLine("Parsing data from Excel file");
                // 实际的解析Excel数据的逻辑
            }
            protected override void ValidateData()
            {
                Console.WriteLine("Validating Excel data");
                // 实际的验证Excel数据的逻辑
            }
            protected override void TransformData()
            {
                Console.WriteLine("Transforming Excel data");
                // 实际的转换Excel数据的逻辑
            }
            protected override void SaveData()
            {
                Console.WriteLine("Saving transformed Excel data");
                // 实际的保存转换后的Excel数据的逻辑
            }
            protected override void CloseFile()
            {
                Console.WriteLine("Closing Excel file");
                // 实际的关闭Excel文件的逻辑
            }
        }
        public class CsvImporter : DataImporter
        {
            protected override void OpenFile()
            {
                Console.WriteLine("Opening CSV file");
                // 实际的打开CSV文件的逻辑
            }
            protected override void ParseData()
            {
                Console.WriteLine("Parsing data from CSV file");
                // 实际的解析CSV数据的逻辑
            }
            protected override void ValidateData()
            {
                Console.WriteLine("Validating CSV data");
                // 实际的验证CSV数据的逻辑
            }
            protected override void TransformData()
            {
                Console.WriteLine("Transforming CSV data");
                // 实际的转换CSV数据的逻辑
            }
            protected override void SaveData()
            {
                Console.WriteLine("Saving transformed CSV data");
                // 实际的保存转换后的CSV数据的逻辑
            }
            protected override void CloseFile()
            {
                Console.WriteLine("Closing CSV file");
                // 实际的关闭CSV文件的逻辑
            }
        }
    }
}
namespace TemplateMethodPattern_模板方法模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DataImporter importer = new ExcelImporter();
            importer.ImportData();

            importer = new CsvImporter();
            importer.ImportData();

            //输出结果
            //Opening Excel file
            //Parsing data from Excel file
            //Validating Excel data
            //Transforming Excel data
            //Saving transformed Excel data
            //Closing Excel file
            //Opening CSV file
            //Parsing data from CSV file
            //Validating CSV data
            //Transforming CSV data
            //Saving transformed CSV data
            //Closing CSV file
            Console.Read();
        }
    }
}

通过使用模板方法模式,可以将算法的通用步骤定义在抽象类中,由具体类来实现具体的细节。这样可以实现代码的复用,避免重复的代码编写。同时,模板方法模式还允许子类根据实际情况对算法的某些步骤进行重写或更改,提供了一定的灵活性。

标签:Console,TemplateMethodPattern,void,Excel,模式,protected,CSV,data,模板
From: https://www.cnblogs.com/ZHIZRL/p/17647671.html

相关文章

  • C++遍历TypeList(可变模板参数)的简单办法
        这里例举了两种方案,一种是基于C++17的constexpr,实现起来更精简。另外一种使用传统的方式,C++11就可以用了。    另外C++11的方案也是一种计算不定参数模板参数个数的方法。#include<iostream>#include<string>//inC++17#if((defined(_MSVC_LANG)......
  • 设计模式和七大原则概述及单一职责原则详解
    设计模式的目的编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的1.代码重用性(相同代码,不用重复编写)2.可读性(编程规范性,便于其他程序员的阅读和理解)3.可扩展性(当需要增加新的功能时,非常的方便)4.可靠......
  • Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任
    Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”通过设计提示(prompt)模板,实现使用更少量的数据在预训练模型(PretrainedModel)上得到更好的效果,多用于:Few-Shot,Zero-Shot等任务。1.背景介绍prompt是当前NLP中研究小样本学习方向上非常......
  • InterpreterPattern-解释器模式
    在C#中,解释器模式(InterpreterPattern)是一种行为型设计模式,它定义了一种语言和解释器之间的关系,使得用户可以使用特定的语法解释表达式或操作。解释器模式有以下几个关键角色:AbstractExpression(抽象表达式):定义了解释器的抽象方法,所有具体表达式的共同父类。在C#中,可以使用抽象类......
  • ProxyPattern-代理模式
    在C#中,代理模式(ProxyPattern)是一种结构型设计模式,它允许通过创建一个代理对象来控制对其他对象的访问。代理对象充当着客户端和被代理对象之间的中间层,可以在访问对象时添加额外的功能,例如权限验证、延迟加载等。代理模式有以下几个关键角色:Subject(主题):定义了代理对象和真实对......
  • 深入理解MVVM架构模式
    MVVM原理MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动同步,从而降低代码的耦合度,提高应用程序的可维护性和可测试性。MVVM框架......
  • vscode 快捷键生成vue模板
    vscode快捷键生成vue模板教程我们在开发vue项目时,需要一个vue模版,去创建一个组件,可以使用快捷键1.文件--》首选项--》用户片段2.搜索vue选择3.模板内容填充{"Printtoconsole":{"prefix":"vue","body":["<template>",......
  • LVS负载均衡之DR模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)一、负载调度器配置(1)关闭selinux、firewalld、NetworkManager#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config#关闭firewalldsystemctlstopfirewalld......
  • LVS负载均衡之DR模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)一、负载调度器配置(1)关闭selinux、firewalld、NetworkManager#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config#关闭firewalldsystemctlstopfirewalld......
  • 【Java设计模式005】代理模式
    概述大家好,个人gzh是大猪和小猪的小家,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!由于一些特定原因某些对象不适合或者不能直接引用目标对象,这时就可以使用代理模式。代理模式为目标对象提供一个代理以......