张德长

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

设计模式之 Template Method模版方法

Template Method模式提供了不重写方法的前提下,允许子类重载部分方法的方法;

在操作中定义算法的框架,将一些步骤由子类实现,该模式可以再不修改算法结构的情况下,让子类重新定义算法的特定步骤;

优点:

代码重用的基础技术;

适用:

想要一次实现算法的不变部分,而使用子类实现算法的可变行为;

当子类间的通用行为需要分解、定位到通用类的时候,这样可以避免代码重复的问题;

 

示例代码C#:

/// <summary>
/// 基类(抽象类,允许子类重写可变部分)
/// </summary>
public abstract class BaseSquare
{
/// <summary>
/// 求平方,不变部分
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public int Square(int x)
{
return x * x;
}
/// <summary>
/// 求和或求差,是可变部分(在子类中重写)
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public abstract int DynamicCal(int x, int y);
/// <summary>
/// 计算最终结果
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public int GetResult(int x, int y)
{
int temp = DynamicCal(x,y);
return Square(temp);
}
}
/// <summary>
/// 平方和
/// </summary>
public class SumSquare : BaseSquare
{
/// <summary>
/// 将可变部分重写
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public override int DynamicCal(int x, int y)
{
return x+y;
}
}
/// <summary>
/// 平方差
/// </summary>
public class SubSquare : BaseSquare
{
/// <summary>
/// 将可变部分重写
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public override int DynamicCal(int x, int y)
{
return x-y;
}
}
class Program
{
static void Main(string[] args)
{
TemplateMethodTest();
Console.ReadLine();
}
public static void TemplateMethodTest()
{
int a = 2, b = 4, res;
res = new SumSquare().GetResult(a, b);
Console.WriteLine($"{a},{b}的平方和是{res}");
res = new SubSquare().GetResult(a, b);
Console.WriteLine($"{a},{b}的平方差是{res}");
}
}

posted on   张德长  阅读(10)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-10-08 自然语言处理NLP与深度学习(学习笔记)
点击右上角即可分享
微信分享提示