设计模式学习笔记-模板方法

本文详细介绍了模板方法设计模式的概念、实用性、类图、结构展示代码、小结等内容,通过实例展示了如何使用模板方法模式实现算法的复用与封装,使系统结构更加合理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:                                                                                                      

模板方法(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。

实用性:                                                                                                    

1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

2.各子类中公共的行为应被提取出来并集中到一个公共类中以避免代码重复。

   首先识别现有代码的不同之处,并且将不同之处分离为新的操作。

   最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。

3.控制子类的扩展

类图:                                                                                                      

结构展示代码:                                                                                           

1.定义抽象父类

    abstract class AbstractClass
{
/// <summary>
/// 抽象行为,放到子类去实现
/// </summary>
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();

/// <summary>
/// 模板方法,给出了逻辑的框架,但是里面的抽象操作都需要子类去实现
/// </summary>
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine(
"");
}
}

2.定义实现算法的子类

    class ConcreteClassA:AbstractClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine(
"具体类A实现抽象父类的方法1");
}
public override void PrimitiveOperation2()
{
Console.WriteLine(
"具体类A实现抽象父类的方法2");
}
}
class ConcreteClassB:AbstractClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine(
"具体类B实现抽象父类的方法1");
}
public override void PrimitiveOperation2()
{
Console.WriteLine(
"具体类B实现抽象父类的方法2");
}
}

 3.客户端调用

        /// <summary>
/// 测试模板方法
/// </summary>
static void TestTemplateMethod()
{
AbstractClass c;
c
= new ConcreteClassA();
c.TemplateMethod();

c
= new ConcreteClassB();
c.TemplateMethod();
Console.Read();
}

小结:                                                                                                      

模板方法就是最简单的代码复用和封装,在很多系统类库中都有使用,让你的系统的结构更加合理

转载于:https://www.cnblogs.com/jqbird/archive/2011/08/20/2146936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值