中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
Item 22. 模板方法与曲线救国(Template Method)
作者:未知 时间:2005-07-27 23:19 出处:CSDN 责编:chinaitpower
              摘要:Item 22. 模板方法与曲线救国(Template Method)

Item 22. Template Method

敬告
Template Method 与 C++中的templates毫不相干,它只是一种设计方法(亦或设计模式)。
------------------------
1、Template Method设计的目的
Template Method是用于基类设计的一种方法,它使得子类的任务更加清晰,让子类设计者的注意力集中于基类的contract是如何实现的,而不必关心各个contract之间的关系。对于基类来说就是“曲线救国”。

2、从继承角度看成员函数
虚函数,纯虚函数,非虚函数
对虚函数函数,子类设计者有权利选择是否Overriding它。因此基类设计者就需要对它有一个默认的实现。
对纯虚函数,子类就必须要Overriding它。
而非虚函数,子类可以写一个与基类有的一样的非虚函数(not called Overriding),但子类里的这个函数又不能用于多态机制,所以还是不要写它。

3、从访问权利看成员函数
private,public,protected
……

4、Template Method 的实现
Template Method 就是依靠2、3两点来实现的。
基类用一个public nonvirtual 成员函数访问protected virtual成员函数,
子类在需要的时候可以选择Overriding那个protected virtual成员函数,如果是个
pure protected virtual成员函数,那就必须Overriding它。

class App {
  public:
    virtual ~App();
    //...
    void startup() { // Template Method
        initialize();
        if( !validate() )
            altInit();
    }
  protected:
    virtual bool validate() const = 0;
    virtual void altInit();
    //...
  private:
    void initialize();
    //...
};

class MyApp : public App {
  public:
    //...
  private:
    bool validate() const;
    void altInit();
    //...
};

5、为什么要用Template Method?
Template Method使得基类控制了函数的调用顺序(执行流程),子类只负责某个步骤的实现(具体要看是虚还是纯虚)。这样在子类不知道执行细节的情况下,整个系统就动起来了。确实很妙!MFC就是这样的。
所以就不要奇怪当年有人选择“曲线救国”那条路了


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有