c# 组合模式
程序员文章站
2023-11-05 21:25:52
结构图: 抽象对象:复制代码 代码如下: abstract class component {&nb...
结构图:
抽象对象:
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)
{
//throw new notimplementedexception();
console.writeline("cannot add to a leaf");
}
public override void remove(component c)
{
//throw new notimplementedexception();
console.writeline("cannot remove to a leaf");
}
public override void display(int depth)
{
//throw new notimplementedexception();
console.writeline(new string('-', depth) + name);
}
}
可以有子结点:
class composite : component
{
private list<component> children = new list<component>();
public composite(string name)
: base(name)
{ }
public override void add(component c)
{
//throw new notimplementedexception();
children.add(c);
}
public override void remove(component c)
{
//throw new notimplementedexception();
children.remove(c);
}
public override void display(int depth)
{
//throw new notimplementedexception();
console.writeline(new string('-', depth) + name);
foreach (component component in children)
{
component.display(depth + 2);
}
}
}
主函数调用:
class program
{
static void main(string[] args)
{
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 x");
comp2.add(new leaf("leaf xya"));
comp2.add(new leaf("leaf xyb"));
comp.add(comp2);
root.display(1);
console.readkey();
}
}
抽象对象:
复制代码 代码如下:
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)
{
//throw new notimplementedexception();
console.writeline("cannot add to a leaf");
}
public override void remove(component c)
{
//throw new notimplementedexception();
console.writeline("cannot remove to a leaf");
}
public override void display(int depth)
{
//throw new notimplementedexception();
console.writeline(new string('-', depth) + name);
}
}
可以有子结点:
复制代码 代码如下:
class composite : component
{
private list<component> children = new list<component>();
public composite(string name)
: base(name)
{ }
public override void add(component c)
{
//throw new notimplementedexception();
children.add(c);
}
public override void remove(component c)
{
//throw new notimplementedexception();
children.remove(c);
}
public override void display(int depth)
{
//throw new notimplementedexception();
console.writeline(new string('-', depth) + name);
foreach (component component in children)
{
component.display(depth + 2);
}
}
}
主函数调用:
复制代码 代码如下:
class program
{
static void main(string[] args)
{
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 x");
comp2.add(new leaf("leaf xya"));
comp2.add(new leaf("leaf xyb"));
comp.add(comp2);
root.display(1);
console.readkey();
}
}
下一篇: 男人早泄吃什么好的快