[問題] 繼承架構設計問題..
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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):