作者xamous (一天死去一点)
看板C_and_CPP
标题[问题] 继承架构设计问题..
时间Tue Apr 14 09:15:01 2009
Hi 大家好,
最近遇到一个问题,想向大家请教一下:
基本上 class 架构的概念是这样:
// interfaces
class Base;
class BaseManager
{
public:
virtual void addItem(const Base& base) = 0;
virtual const Base& getItem(size_t index) const = 0;
};
// implementations
class Derived : public Base;
class DerivedManager : public BaseManager
{
private:
std::vector<Base> itemsVec_;
publuc:
virtual void addItem(const Base& base);
virtual const Base& getItem(size_t index) const;
const Base& getItemFitSomeCondition(); // customized method
}
bool API_RetrieveItems(BaseManager& manager)
{
manager.addItem(...);
...
}
概念上用起来像:
DerivedManager mgr;
API_RetrieveItems(mgr); // retrieve items
const Base& b1 = mgr.getItem(0);
const Base& b2 = mgt.getItemFitSomeCondition();
现在遇到两个问题:
1)
希望在 DerivedManager 的实做中用 vector 来管理元素,因为:
1. vector 管理方便。
2. 我希望在 DerivedManager 内保留的是 item 的 "副本",vector
会将元素拷贝一份的行为刚好符合所需。
但是因为 Base 只是 abstract class,所以无法产生 vector<Base>。
2)
client 在使用上也会遇到问题,因为 Base 是 abstract,所以
API_RetrieveItmes 的设计者只看到 interface 的话,也无法产生 Base
物件来作为 addItem 的参数。
想请问一下像这样的架构有什麽问题呢?有没有更好的架构可以使用?
学艺不精请多指教 m(_ _)m
--
雁子回到了遥远的北方 你的名字我已想不起来 别怪我 生命太匆忙
http://blog.xamous.net
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 192.35.156.165
※ 编辑: xamous 来自: 192.35.156.165 (04/14 09:19)
※ 编辑: xamous 来自: 192.35.156.165 (04/14 09:20)