decorator模式的问题

chenxs03 2010-04-01 05:39:28
学了decorator模式,觉得实现起来挺麻烦.
觉得decorator模式无非是一串有公共接口的对象的链表.
干脆用list存放对象指针,也可以动态添加/执行功能的能力,不好吗?
...全文
99 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FingerStyle 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 demon__hunter 的回复:]

装饰模式适用的是给一个对象的行为动态的增加些功能,强调是在不修改被装饰对象的类定义情况修改。装饰过程能体现核心和装饰的主次之分来,而且不必修改被装饰对象代码。
[/Quote]

GOf的那本对装饰模式将的很透彻
o笨笨猪o 2010-04-03
  • 打赏
  • 举报
回复
这说明你还没有理解这个模式。学习一个模式的时候,你应该在大脑里形成一个问题域,首先知道在软件设计或实现中会存在这样的一个问题,然后再带着这个问题去学习模式。
另外,在学习模式前最好有一定的OOA/OOD/OOP思想,否则很难进入状态。
chenxs03 2010-04-03
  • 打赏
  • 举报
回复
什么叫,被装饰物不止一个?
donkey301 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenxs03 的回复:]
学了decorator模式,觉得实现起来挺麻烦.
觉得decorator模式无非是一串有公共接口的对象的链表.
干脆用list存放对象指针,也可以动态添加/执行功能的能力,不好吗?
[/Quote]
你说的list存放对象指针是不是这样:

class VisualComponent
{
public:
VisualComponent();
virtual void Draw()
{
//Draw somthing....
}
}
class Decorator1: public VisualComponent
{
public:
virtual Draw()
{
VisualComponent::Draw();
//Draw some ornament 1
}
}
class Decorator2: public VisualComponent
{
public:
virtual Draw()
{
VisualComponent::Draw();
//Draw some ornament 2
}
}

//use decorator
class Use
{
pubic:
Draw()
{
list<VisualComponent*>::iterator it_Decorators;
for ( it_Decorators=m_Decorators.begin();
it_Decorators != m_Decorators.end();
++it_Decorators )
(*it_Decorators)->Draw();
}
}

如果被装饰的物体只有一个,那么这样用也能实现动态增加,那如果被装饰物不止一个怎么办?
jackyjkchen 2010-04-01
  • 打赏
  • 举报
回复
那个……java里这么用比较方便,C++里麻烦些吧
机智的呆呆 2010-04-01
  • 打赏
  • 举报
回复
装饰模式适用的是给一个对象的行为动态的增加些功能,强调是在不修改被装饰对象的类定义情况修改。装饰过程能体现核心和装饰的主次之分来,而且不必修改被装饰对象代码。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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