安全模式和透明模式之外的另外一种合成模式.
看到网上说合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全模式和透明模式.
安全模式是集合类节点和叶子节点公有所有积累的借口.叶子节点的Add()和Remove函数产生异常或者做特殊处理.
我想出一种办法.把叶子节点的Add()和Remove函数私有化.实现为空.
如:
class Component
{
protected:
// Fields
string m_name;
public:
// Constructors
Component(string name){ m_name = name; }
public:
// Methods
virtual void Add(Component* c) = 0;
virtual void Remove(Component* c) = 0;
virtual void Display(int depth) = 0;
};
// "Leaf"
class Leaf: public Component
{
public:
// Constructors
Leaf(string name) : Component(name) { }
private:
// Methods
void Add(Component* c){ }
void Remove(Component* c){}
public:
// Methods
void Display(int depth)
{
for(int i=0; i<depth;++i)
cout<<"-";
cout<<m_name<<endl;
}
};
这样客户程序就不能调用这两个私有函数.如果调用,编译会出错.
[解决办法]
ms个人觉得这也是一种安全模式吧(只是形式上变了下)?