模板方法模式(Template Method)

来源:互联网 发布:互联网推广软件 编辑:程序博客网 时间:2024/05/21 18:04

 模板方法模式(Template Method)  

       模板方法(Template Method)模式是一种非常简单而又经常使用的设计模式.先创建一个父类,把其中的一个或多个方法留给子类去实现,这实际上就是在使用摸板模式.所谓的摸板模式可以这样来理解:"在一个类中定义一个算法,但将此算法的某些细节留到子类中去实现.换句话说,基类是一个抽象类,那么你就是在使用一种简单形式的摸板模式."
      更近一步可以这样来理解:"准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方法实现这些抽象方法,从而对剩余的逻辑有不同的实现."
模式意图
      将一个类的基本部分抽取出来放到一个基类中,这样它就不必重复出现在几个派生类里.
典型的摸板方法应用
   1. HttpServlet技术
       HttpServlet类提供了一个service()方法.这个方法调用了一个或是多个do方法,完成对客户端发起的请求的处理,这些do方法则是由具体的HttpServlet类提供的.那么这里的service()方法就是一个摸板方法.

using System;
public abstract class Template
{
    protected string pcType;
    public Template(string pcType)
    {
        this.pcType = pcType;
    }

    //留给子类去实现(抽象操作)
    protected abstract void MakeCPU(string pcType);
    protected abstract void MakeMainBoard(string pcType);
    protected abstract void MakeHD(string pcType);

    private void MakeOver(string pcType)
    {
        Console.WriteLine(pcType + "裝好了");
    }
    // 模板方法
    public void MakePC()
    {
        MakeCPU(pcType);
        MakeMainBoard(pcType);
        MakeHD(pcType);

        MakeOver(pcType);
    }
}

public class NotePc : Template
{
    public NotePc(string pcType)
        : base(pcType)
    { }
    protected override void MakeCPU(string pcType)
    {
        Console.WriteLine(pcType + "的CPU装好了");
    }

    protected override void MakeMainBoard(string pcType)
    {
        Console.WriteLine(pcType + "的主板装好了");
    }

    protected override void MakeHD(string pcType)
    {
        Console.WriteLine(pcType + "的硬盘装好了");
    }
}

class Client
{
    public static void Main()
    {
        Template t = new NotePc("笔记本");
        t.MakePC();
    }
}