程序地带

设计模式 - 17)组合模式


abstract class Component
{
protected string name;
public Component(string name)
{
this.name = name;
}
public abstract void Add(Component c);
public abstract void Remove(Component c);
public abstract void Display(int depth);
}
class Leaf : Component
{
public Leaf(string name) : base(name) { }
public override void Add(Component c)
{
Console.WriteLine("Leaf cannot add");
}
public override void Remove(Component c)
{
Console.WriteLine("Leaf cannot remove");
}
public override void Display(int depth)
{
Console.WriteLine(new string("-", depth) + name);
}
}
class Composite : Component
{
public Composite(string name) : base(name) { }
IList<Component> children = new List<Component>();
public override void Add(Component c)
{
children.Add(c);
}
public override void Remove(Component c)
{
children.Remove(c);
}
public override void Display(int depth)
{
Console.WriteLine(new string("-", depth) + name);
foreach (Component c in children)
{
c.Display(depth + 2);
}
}
}
// 业务代码:
Composite root = new Composite("高新兴");
Leaf gc = new Leaf("财务部");
Leaf gi = new Leaf("IT 部");
Leaf ghr = new Leaf("人力");
root.Add(gc);
root.Add(gi);
root.Add(ghr);
Composite pa = new Composite("平安事业部");
Leaf pahr = new Leaf("人力");
Composite payf = new Composite("研发");
Leaf jg = new Leaf("交通");
payf.Add(jg);
pa.Add(pahr);
pa.Add(payf);
root.Add(pa);
root.Display(1);
- Y 公司
---财务部
---IT 部
---人力
--- X 事业部
-----人力
-----研发
-------交通

组合模式定义了基本对象和组合对象,基本对象可以被组合到更复杂的组合对象,而组合对象又可以被组合,不断递归;
可以在各个基本对象中定义内部对继承的抽象类的实现,而用户并不需要知道是处理一个基本对象还是组合对象,因此用不着写一些判断语句。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/MichaelLoveSna/p/14199101.html

随机推荐

潮流玩具行业研究:肇始于童心,进阶于品牌

潮流玩具行业研究:肇始于童心,进阶于品牌

遍览海内外同行,我们认为依赖外部IP授权的模式难以诞生伟大的潮玩品牌,打造原创IP才是获得持久生命力与高利润率的进阶之路。原创潮玩公司需要积极开拓原创IP,实...

分析猿 阅读(221)

java从头开始--static关键字与代码块

java从头开始--static关键字与代码块

static关键字static:静态的。关键字:被语言赋予特定含义的单词,都是小写。static关键字可以应用于修饰类的属性,方法,...

crraxx 阅读(405)

ReentrantLock 和AQS

抽象队列同步器,通过一个int类型变量表示持有锁的状态。state+FIFO队列(head、tail、node(waitStatus,Thread&#...

Crystal_Mria 阅读(415)

可以让数据在屏幕上跳舞的数据可视化工具

可以让数据在屏幕上跳舞的数据可视化工具

在数字经济时代,人们需要对大量的数字进行分析,帮助用户更直观的察觉差异,做出判断,减少时间成本。当然,你可能想象不到这种数据可视化...

明月说数据 阅读(137)

java反射的作用与原理

什么是java的反射java反射是可以让我们在运行的时,通过一个类的Class对象来获取它获取类的方法、属性、父类、接口等类的内部信息的机制这种动态获取信息以及动态调用对象的方法的功能称...

東宁木木 阅读(909)