Template Tethod 模式

xlsue 2006-01-03 02:30:48
class Base
{

private:
// … 一些数据,与本主题无关 …
virtual std::string classID() const { return "Base"; }

protected:
// 当派生类装入自身后,应该调用该函数的父类实现。
virtual void do_read( std::istream& );

// 当派生类保存完自身后,应该调用该函数的父类实现。
virtual void do_write( std::ostream& ) const;

public:
// … 需要实现的一些虚拟函数,与本主题无关…
// Streaming functions.
void read( std::istream& );
void write( std::ostream& ) const;

virtual ~Base();
};

// 流处理过程中的几个帮助函数。注意它们并非友元!

std::ostream& operator <<
( std::ostream& o, const Base& b) { b.write(o); }

std::istream& operator >>
( std::istream& o, Base& b) { b.read(o); }

void Base::write( std::ostream& o ) const
{
o << classID() << std::endl;
do_write(o);
}

std::auto_ptr<Base> loadBase( std::istream& inFile )
{
std::string className;
std::getline( inFile, className );

std::auto_ptr<Base> newBase =genericFactory<Base>::instance().create(className);

if( newBase.get() != 0 ) {
inFile >> *newBase;
}

return newBase;
}

void Base::read( std::istream& i )
{
do_read(i);
}




...全文
124 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinall 2006-01-05
  • 打赏
  • 举报
回复
呵呵,一句话:
普通意义下的Template是泛化类型。(这个泛化的办法是通过模板参数实现)
Template Method是泛化一个“算法”中的某些步骤。(这个泛化办法是通过重载virtual函数实现)
sinall 2006-01-05
  • 打赏
  • 举报
回复
刚刚看ACE,想起这个帖子。

上面的模式是Template Method。我的理解在上面已经写下了。

附ACE文档中的一段话:
  该方法是一个“模板方法”(Template Method)。模板方法用于定义一个算法的若干步骤的顺序,并允许改变特定步骤的执行。这种变动是通过允许子类定义这些方法的实现来完成的。(有关模板方法的更多信息见“设计模式”参考指南)。
cpptoobad 2006-01-05
  • 打赏
  • 举报
回复
回复人: sinall() ( ) 信誉:98 2006-01-05 11:44:00 得分: 0


呵呵,一句话:
普通意义下的Template是泛化类型。(这个泛化的办法是通过模板参数实现)
Template Method是泛化一个“算法”中的某些步骤。(这个泛化办法是通过重载virtual函数实现)
---------------------------------------------------------------------------------
Template Method模式中的Template和GP中的templates是有区别的,不是同一个意思。

xlsue 2006-01-03
  • 打赏
  • 举报
回复
回复人: sinall() ( ) 信誉:98 2006-01-03 19:25:00 得分: 0

楼主的例子恐怕还不够好。
Template Method不单单是read和virtual do_read这么单纯。
----------------------------------------------------------------------
声明:这个不是我写的,是copy下来的。
那你觉得这个模式叫什么?你能否描述一下Template Method模式的具体概念?

shenmea00000 2006-01-03
  • 打赏
  • 举报
回复
学习中~~~~~~~~~~
sinall 2006-01-03
  • 打赏
  • 举报
回复
楼主的例子恐怕还不够好。
Template Method不单单是read和virtual do_read这么单纯。

我觉得应该是这样的:
有个“流程”,它有N个步骤,其中有个步骤M,整个“流程”对他的具体实现依赖比较小,它可以被动态的配置,这样,它就写成virtual,以便继承类可以继承整个“流程”,而且可以配置它独特的步骤M。

为什么叫Template Method,普通的Template指的是类型,而Template Method是将一个流程给Template化了。
bing_huo 2006-01-03
  • 打赏
  • 举报
回复
我只知道有个模式叫 Template Method
cunsh 2006-01-03
  • 打赏
  • 举报
回复
先顶
再学习;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧