大话设计模式之模板方法模式(Template Method Pattern)

转载址址:

http://www.cnblogs.com/chengxingliang/archive/2011/11/29/2256139.html


四个角色:抽象类(AbstractClass)、具体子类(ConcreateClass)、客户端(Client) 

        抽象类(AbstractClass):定义抽象原始操作让其子类可重定义,并且添加一个模板方法定义算法骨架模板,调用原始操作

        具体子类(ConcreateClass):实现原始操作方法。

        客户端(Client) :实例化具体子类,然后调用模板方法执行子类的原始操作。

实现思路:在客户端实例化具体子类,通过子类实例调用模板方法来按照一定算法执行子类定义的原始操作。

类图:

应用场景:一个人的生活。

分析:每个人的生活习惯不一样,但是基本规律是不会改变的,都是起床、吃饭、睡觉,在本实例中生活方法是一个模板,然后每个人作为子类可以有不同的起床、吃饭、睡觉时间和方式。

        下面我们在控制台程序去演示一下如何使用Template Method Pattern:

        一、抽象类(AbstractClass):

    //抽象类(AbstractClass)
abstract class AbsPeople
{
// 起床
abstract public void GetUp();

// 吃饭
abstract public void Eat();

// 睡觉
abstract public void Sleep();

// 生活模板方法
public void Live()
{
GetUp();
Eat();
Sleep();
}
}

        二、具体子类(ConcreateClass):

    //具体子类(ConcreateClass)
class ConPeopleJack:AbsPeople
{
public override void GetUp()
{
Console.WriteLine("Jack 9点起床了");
}

public override void Eat()
{
Console.WriteLine("Jack 今天吃中式快餐餐。");
}

public override void Sleep()
{
Console.WriteLine("Jack 23点晚晚的回家睡觉。");
}
}


//具体子类(ConcreateClass)
class ConPeopleMike : AbsPeople
{
public override void GetUp()
{
Console.WriteLine("Mike 今天11点起床了。");
}

public override void Eat()
{
Console.WriteLine("Mike 今天吃西餐。");
}

public override void Sleep()
{
Console.WriteLine("Mike 19点早早的睡觉。");
}
}

        三、 客户端(Client):

    //客户端(Client)
class Program
{
static void Main(string[] args)
{
AbsPeople jack = new ConPeopleJack();
jack.Live();
AbsPeople mike = new ConPeopleMike();
mike.Live();

Console.ReadLine();
}
}

       如需源码请点击 TemplateMethodPattern.rar  下载。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值