Composite设计模式
-
虚函数
-
继承与父类.又可以携带指针(
Delegation
)
示例代码:
component.h
-> 统一父类
#pragma once
#ifndef __COMPONENT__
#define __COMPONENT__
class Component
{
int value;
public:
Component(int val) : value(val) {}
// 定义一个虚函数 -> 之所以不是纯虚函数是因为不是每个子类都要去实现它
virtual void add(Component*) {}
};
#endif // !__COMPONENT__
primitive.h
-> 子类A
#pragma once
#ifndef __PRIMITIVE__
#define __PRIMITIVE__
#include "component.h"
class Primitive : public Component
{
public:
// 调用父类构造函数
Primitive(int val): Component(val) {}
};
#endif // !__PRIMITIVE__
composite.h
-> 子类B
#pragma once
#ifndef __COMPOSITE__
#define __COMPOSITE__
#include "component.h"
class Composite : public Component
{
vector<Component*> c;
public:
Composite(int val): Component(val) {}
// 实现父类虚函数
void add(Component* elem) { c.push_back(elem); }
};
#endif // !__COMPOSITE__
创建未来的子类(abstraction)
子类自己去创造自己,并且创建出来的会被登记到abstraction
当中,abstraction
就可以调用下面子类的方法
class
当中static
的data
一定要在class
外进行声明一次 -> class
外的声明才会给到内存