设计模式-Composite

来源:互联网 发布:网络知识产权侵权 编辑:程序博客网 时间:2024/05/04 03:44

GeekBand笔记:
侯捷老师-C++面向对象高级编程

Composite
设计不同类的时候,考虑到各个类之间的相互关联。
已FileSystem为例,Primitive为File的范例,Composite除了容纳基本的Primitive,还需要容纳自己本身。另一个考虑的问题是,容器里面应该放置什么?首先,不写死,vector<>里面既不放置左边的类型,也不放置右边,而是放置指向父类的指针。其次,C++里面容器必须放指针,而不是放置具体的数值,因为容器每一个块大小应该相等。
在Component类的定义中,add函数没有定义纯虚函数的原因是,倘若定义为纯虚函数,子函数必须重新定义add函数,但是Primitive类显示生活中,不需要重新定义,so…
下面是三个class的代码:

class Component{    int value;    public:    Component(int val) { value = val; }    virtual void add(Componet*){}   };   
class Composite:public Component{    vector<Component*> c;    public:        Composite(int val):Component(val){}        void add(Component* elem){            c.push_back(elem);        }        ...};
class Primitive:public Component{    public:    Primitive(int val):Component(val){}};
0 0
原创粉丝点击