客户端使用像下面这样
Composite root = new Composite("root");root.Add(new Leaf("Leaf A"));
root.Add(new Leaf("Leaf B"));
Composite comp = new Composite("Composite X");
comp.Add(new Leaf("Leaf XA"));
comp.Add(new Leaf("Leaf XB"));
root.Add(comp);
Composite comp2 = new Composite("Composite XY");
comp2.Add(new Leaf("Leaf XYA"));
comp2.Add(new Leaf("Leaf XYB"));
comp.Add(comp2);
root.Add(new Leaf("Leaf C"));
root.Display(1);
或者像公司体系结构这种当需求中体现部分整体层次结构,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,考虑使用组合模式。上面例子中客户端无需关心处理一个叶节点还是枝节点组合组件,都用统一方式访问。
5、Flyweight 享元享元模式主要用于减少对象的数量,以减少内存占用和提供性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。像棋盘中的棋子,不可能创建一整个所有的棋子对象。所以它主要解决当需要大量的对象,有可能对内存造成溢出,我们可以把共同的部分抽象出来,这样如果有相同的业务请求,直接返回内存中已有的对象,不去重复创建了。
核心就是用一个字典存储这些需要重复使用的对象。
通过上面结构图可以看见就是把Flyweight享元类聚合到FlyweightFactory享元工厂中,享元工厂中用一个Hashtable存储这些具体的享元类。
class FlyweightFactory{
private Hashtable flyweights = new Hashtable();
public FlyweightFactory()
{
flyweights.Add("X", new ConcreateFlyweight);
flyweights.Add("Y", new ConcreateFlyweight);
}
public Flyweight GetFlyweight(string key)
{
return (Flyweight)flyweights[key];
}
}