模板方法模式(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();
}
}
更近一步可以这样来理解:"准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方法实现这些抽象方法,从而对剩余的逻辑有不同的实现."
模式意图
将一个类的基本部分抽取出来放到一个基类中,这样它就不必重复出现在几个派生类里.
典型的摸板方法应用
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();
}
}
- 模板方法模式(Template Method)
- Template Method - 模板方法模式
- 模板方法模式(Template Method)
- 模板方法(Template Method)模式
- Template Method (模板方法模式)
- 模板方法模式--Template Method
- Template Method模板方法模式
- 模板方法模式(Template Method)
- 【模板方法模式(Template Method)】
- 模板方法模式(Template method)
- Template Method - 模板方法模式
- 模板方法模式(Template Method)
- 模板方法模式 Template Method
- 模板方法模式(Template Method)
- 模板方法模式(Template Method)
- 模板方法模式(Template Method)
- 模板方法模式 template method
- Template Method模式(模板方法模式)
- CTreeCtrl的使用(一)
- 如何制作日志查看器
- 简单工厂模式
- VS2005中ajax安装指南
- 如何浏览注册表信息
- 模板方法模式(Template Method)
- igoogle中原来的一些随笔
- 修身养性,为人处事100条
- WINDOWS数据类型
- ASP.NET 抓取网页源文件
- WinCE 6.0中串口读数据函数代码分析
- “李雷和韩梅梅”让八零后集体怀旧
- 有时候会想的一些小事情
- C#3.0新特性