设计模式之模板方法模式(c#)
博客专区 > GoodWin 的博客 > 博客详情
设计模式之模板方法模式(c#)
GoodWin 发表于4年前
设计模式之模板方法模式(c#)
  • 发表于 4年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

模板方法模式

1 适用情况:

     当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理.

2 定义:

      定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.

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

3 例子: (引用于《大话设计模式》)

       1) AbstractClass是抽象类,定义实现了一个模板方法,这个模板方法一般是一个具体方法.这就是一个顶级逻辑的骨架,而逻辑的组成步骤则在相应的抽象操作中,推迟到子类实现.

abstract class AbstractClass
    {
        public abstract void PrimitiveOperation1();
        public abstract void PrimitiveOperation2();

        public void TemplateMethod()
        {
            PrimitiveOperation1();
            PrimitiveOperation2();
            Console.WriteLine("");
        }
    }

           

        2) ConcreteClass类继承抽象类AbstractClass,不同的ConcreteClass可以给出抽象方法的不同实现.

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)客户端调用如下:

    class Program
    {
        static void Main(string[] args)
        {
            AbstractClass c;

            c = new ConcreteClassA();
            c.TemplateMethod();

            c = new ConcreteClassB();
            c.TemplateMethod();

            Console.Read();
        }
    }


共有 人打赏支持
粉丝 0
博文 7
码字总数 3274
×
GoodWin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: