与大虾对话: 领悟设计模式

 

与大虾对话: 领悟设计模式

--Template Method / Visitor

[译者按] 本文根据发表在CUJ Expert Forum上的两篇文章编译而成。C/C++ User's Journal是目前最出色的C/C++语言专业杂志,特别是在C++ Report闭刊之后,CUJ的地位更加突出。CUJ Expert Forum是CUJ主办的网上技术专栏,汇集2000年10月以来C++社群中顶尖专家的技术短文,并免费公开发布,精彩纷呈,是每一个C/C++学习者不可错过的资料。由Jim Hyslop和Herb Sutter主持的Conversation系列,是CUJ Expert Forum每期必备的精品专栏,以风趣幽默的对话形式讲解C++高级技术,在C++社群内得到广泛赞誉。译者特别挑选两篇设计模式方面的文章,介绍给大家。设计模式方面的经典著作是GoF的Design Patterns。但是那本书有一个缺点,不好懂。从风格上讲,该书与其说是为学习者而写作的教程范本,还不如说是给学术界人士看的学术报告,严谨有余,生动不足。这一点包括该书作者和象Bjarne Stroustrup这样的大师都从不讳言。实际上Design Pattern并非一定是晦涩难懂的,通过生动的例子,一个中等水平的C++学习者完全可以掌握基本用法,在自己的编程实践中使用,得到立竿见影的功效。这两篇文章就是很好的例证。本文翻译在保证技术完整性的前提下作了不少删节和修改,以便使文章显得更紧凑。

----------------------------------------------------------

人物介绍:

我 ---  一个追求上进的C++程序员,尚在试用期,聪明但是经验不足。

Wendy --- 公司里的技术大拿,就坐在我旁边的隔间里,C++大虾,最了不起的是,她是个女的!她什么都好,就是有点刻薄,

          我对她真是又崇拜又嫉妒。

----------------------------------------------------------

I. Virtually Yours  -- Template Method模式

我在研究Wendy写的一个类。那是她为这个项目写的一个抽象基类,而我的工作就是从中派生出一个具象类(concrete class)。这个类的public部分是这样的:

class Mountie {
public:
    void read( std::istream & );
    void write( std::ostream & ) const;
    virtual ~Mountie();

很正常,virtual destructor表明这个类打算被继承。那么再看看其protected部分:

protected:
    virtual void do_read( std::istream & );
    virtual void do_write( std::ostream & ) const;

也不过就是一会儿的功夫,我识破了Wendy的把戏:她在使用template method模式。public成员函数read和write是非虚拟的,它们肯定是调用protected部分do_read/do_write虚拟成员函数来完成实际的工作。啊,我简直为自己的进步而飘飘然了!哈,Wendy,这回你可难不住我,还有什么招数?尽管放马过来... 突然,笑容在我脸上凝固,因为我看到了其private部分:

private:
    virtual std::string classID() const = 0;

这是什么?一个private纯序函数,能工作么?我站了起来,

“Wendy,你的Mountie类好像不能工作耶,它有一个private virtual function。”

“你试过了?”她连头都不抬。

“嗯,那倒是没有啦&#x

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

myan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值