• 极速理解设计模式系列:20.模板方法模式(Template Method Pattern)


    四个角色:抽象类(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  下载。

  • 相关阅读:
    2.12 使用@DataProvider
    2.11 webdriver中使用 FileUtils ()
    Xcode8 添加PCH文件
    The app icon set "AppIcon" has an unassigned child告警
    Launch Image
    iOS App图标和启动画面尺寸
    iPhone屏幕尺寸、分辨率及适配
    Xcode下载失败 使用已购项目页面再试一次
    could not find developer disk image
    NSDate与 NSString 、long long类型的相互转化
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2256139.html
Copyright © 2020-2023  润新知