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

本文共 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

你可能感兴趣的文章
读取日志文件,搜索关键字,打印关键字前5行。yield、deque实例
查看>>
(转载) ExtJs大比拼JQuery:Dom文档操作
查看>>
使Android开发方便快捷的8个好工具
查看>>
递归与非递归遍历
查看>>
Nagios图像绘制插件PNP4Nagios部署和测试
查看>>
在SqlServer2008R2中,在一张表上加上insert、update、delete触发器(带游标)
查看>>
常用模块--- 正则模块 正则表达式 re 模块
查看>>
图解aclocal、autoconf、automake、autoheader、configure
查看>>
chapter 17
查看>>
C/C++ cast
查看>>
jfinal的controller默认访问的方法是什么
查看>>
Punycode
查看>>
HTML LIST 输入框自动查询追加框,自动过滤 HTML5
查看>>
file_get_contents调用接口出现的错误
查看>>
SQL Server 2008 调试存储过程(调用用户定义表类型)
查看>>
文件隐藏在一张图片里
查看>>
学c++需要先学c语言吗?
查看>>
ubuntu apt 安装 mpv
查看>>
内部类
查看>>
UNIX网络编程——Socket通信原理和实践
查看>>