码迷,mamicode.com
首页 > 其他好文 > 详细

行为型模式(一)模板方式模式

时间:2015-11-27 12:19:28      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

 

一句话的概要

在抽象中定义算法骨架,讲一些可变的步骤延迟到子类去实现。

剧情

小明同学的表弟,今天给小明同学打电话。说自己失恋了。小明同学请他表弟吃饭,顺道安慰一下。

吃饭的过程中,小明同学就跟他表弟说:两个人从相识到相爱。无非就这么点事。只不过有些人有好感,有些人没有好感。

从相识到相爱,事情很相同。只不过有些地方不一样。这种情况,我们可以把相同的地方,定义成模板。然后讲不一样的地方,推迟到子类去实现。

我们用模板方法,构造以上剧情。

任务一:创建模板

我们创建了从相识到相爱的模板。其中我们把好感度设置为抽象。如果没有好感度,剩下的都无效。

接着我们定义这些模板的执行顺序,我们写在Go这个方法里面。

 public abstract class FallInLove
    {
        public void Single()
        {
            Console.WriteLine("两个人都是单身");
        }

        public abstract bool GoodWill();

        public void Know()
        {
            Console.WriteLine("两个人相识");
        }

        public void Love()
        {
            Console.WriteLine("两个人恋爱");
        }

        public void Go()
        {
            Console.WriteLine("两个人从相识到相爱的过程");
            this.Single();
            if (this.GoodWill())
            {
                this.Know();
                this.Love();
            }
        }
    }

任务二:创建可变性

模板已经有了,我们接下来创建可变性的方法。并让可变方法继承抽象类。

public class Winer : FallInLove
    {
        public override bool GoodWill()
        {
            Console.WriteLine("互相有好感");
            return true;
        }
    }

    public class Loser : FallInLove
    {
        public override bool GoodWill()
        {
            Console.WriteLine("没有好感");
            Console.WriteLine("感情破裂");
            return false;
        }
    }

任务三:调用

接下来的事情就简单了,我们实例化一个Win,一个Loser。并且各自调用。

static void Main(string[] args)
        {
            Console.Write("成功");
            FallInLove fall = new Winer();
            fall.Go();
            Console.WriteLine("-------------------------------");
            Console.Write("失败");
            fall = new Loser();
            fall.Go();
            Console.ReadLine();
        }

技术分享

总结

模板方法就是在一个抽象类中,定义算法骨架,将可变的步骤延迟到子类去实现。

常见场景:有可能提取公共算法骨架

选择关键点:算法骨架是否牢固

行为型模式(一)模板方式模式

标签:

原文地址:http://www.cnblogs.com/chenxygx/p/4998085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!