博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)...
阅读量:5825 次
发布时间:2019-06-18

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

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

模式角色与结构:

 

实现代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace CSharp.DesignPattern.TemplateMethodPattern{    class Program    {        static void Main(string[] args)        {            Account account = new CurrentAccount(); // 还可以通过配置文件和反射来决定创建哪个子类            account.Handle("", "");        }    }    abstract class Account    {        //基本方法——具体方法         public bool Validate(string account, string password)        {            if (account.Equals("") && password.Equals(""))            {                return true;            }            return false;        }        //基本方法——抽象方法         public abstract void CalculateInterest();        //基本方法——具体方法         public void Display()        { }        //基本方法——钩子方法(子类控制父类)        public virtual bool IsLeader()        {            return true;        }        // 模板方法        public void Handle(string account, string password)        {            if (!Validate(account, password))            {                return;            }            if (IsLeader())            {                CalculateInterest();            }            Display();        }    }    class CurrentAccount : Account    {        // 覆盖父类的抽象基本方法         public void CalculateInterest()        {            Console.WriteLine("Current Account..."); //吃面条        }    }    class SavingAccount : Account    {        // 覆盖父类的抽象基本方法         public void CalculateInterest()        {            Console.WriteLine("Saving Account..."); //满汉全席        }    }}

 

转载于:https://www.cnblogs.com/thlzhf/p/3993804.html

你可能感兴趣的文章
c++ const
查看>>
PowerShell 自动化管理 AWS(3)- S3
查看>>
Windows SharePoint Services 3.0 应用程序模板
查看>>
烂泥:去掉“申请连接”选项
查看>>
[IE编程] IE8 新增的C++开发接口
查看>>
安装高可用性虚拟机,livemigration系列之九
查看>>
手把手教你Linux下的文件管理(二)
查看>>
【Cocoa(mac) Application 开发系列之四】Cocos2dx动作编辑器制作流程详解
查看>>
蓝牙Bluetooth技术手册规范下载【转】
查看>>
Android--多线程之Handler
查看>>
如何配置DirectX开发环境
查看>>
c# 主机和网络字节序的转换
查看>>
XBOX ONE游戏开发常见问题
查看>>
MonoRail学习笔记十六:AJax在MonoRail中的使用
查看>>
OGG-00665 OCI Error getting OCI_ATTR_NAME for UDT SYS.ANYDATA(status = 24328
查看>>
Eclipse快捷键大全
查看>>
java16 程序、进程、线程
查看>>
windows自定义快速启动(运行)命令
查看>>
两个Fragment之间如何传递数据
查看>>
集合 set 相关命令
查看>>