模板方法模式

来源:互联网 发布:不属于java语言特点 编辑:程序博客网 时间:2024/06/05 16:32


AbstractClass是抽象类,其实也就是一种抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,他给出了一个顶级逻辑的骨架,
而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
ConcreteClass,实现父类所定义的一个或者多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass
都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。(AbstractClass是ConcreteClass的抽象父类)
优点:
 1 模板方法通过把不变行为搬移到超类,去除子类中的重要代码来体现它的优势。
 2 模板方法提供了一个很好的代码复用平台
 3 当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法吧这些行为搬移到单一的地方,
 这样就帮助子类摆脱重复的 不变的行为的纠缠。
缺点:
 因为引入了一个抽象类,如果具体实现过多的话,需要用户或开发人员需要花更多的时间去理清类之间的关系。
//原型模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Configuration;
namespace yjzcjing
{
   class TestPaper
    {
        public void TestQuestion1()
        {
            Console.WriteLine("杨过得到,给了郭靖,炼成倚天剑,屠龙刀的玄铁是......a,b,c,d.");
            Console.WriteLine("答案是;" + Answerl());
        }
        protected virtual string Answerl()
        {
            return "";
        }
    }
    class TestPaperA:TestPaper
    {
        protected override string Answerl()
        {
            return "b";
        }
    }
    class TestPaperB:TestPaper
    {
        protected override string Answerl()
        {
            return "c";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("学生A的答案:");
            TestPaper stuA = new TestPaperA();
            stuA.TestQuestion1();
            Console.WriteLine("学生B的答案:");
            TestPaper stuB = new TestPaperB();
            stuB.TestQuestion1();
            Console.Read();
        }
    }
}



0 0
原创粉丝点击