Composite_Model
抽象類Component適當情況下實現所有類公共接口的默認行爲。聲明一個接口用於管理和訪問Component的子部件
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Threading. Tasks;
namespace Composite_Model
{
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) ;
}
}
Leaf在組合中表示葉節點對象,葉節點沒有子節點(葉子類)
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Threading. Tasks;
namespace Composite_Model
{
class Leaf : Component
{
public Leaf ( string name) : base ( name)
{
}
public override void Add ( Component c)
{
Console. WriteLine ( "Cannot add to a leaf" ) ;
}
public override void DisPlay ( int depth)
{
Console. WriteLine ( new String ( '-' , depth) + name) ;
}
public override void Remove ( Component c)
{
Console. WriteLine ( "Cannot remove from a leaf" ) ;
}
}
}
Composite爲枝節點行爲,用來存儲子部件,在Component接口中實現與子部件有關的操作、如Add Remove。(分支類)
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Threading. Tasks;
namespace Composite_Model
{
class Composite : Component
{
private IList< Component> children = new List < Component > ( ) ;
public Composite ( string name) : base ( name)
{
}
public override void Add ( Component c)
{
children. Add ( c) ;
}
public override void DisPlay ( int depth)
{
Console. WriteLine ( new String ( '-' , depth) + name) ;
foreach ( Component c in children)
{
c. DisPlay ( depth + 2 ) ;
}
}
public override void Remove ( Component c)
{
children. Remove ( c) ;
}
}
}
客戶端
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Threading. Tasks;
namespace Composite_Model
{
class Program
{
static void Main ( string [ ] args)
{
Composite root = new Composite ( "root" ) ;
root. Add ( new Leaf ( "LeafA" ) ) ;
root. Add ( new Leaf ( "LeafB" ) ) ;
Composite comp = new Composite ( "Composite X" ) ;
comp. Add ( new Leaf ( "Leaf XA" ) ) ;
comp. Add ( new Leaf ( "Leaf XB" ) ) ;
Composite comp2 = new Composite ( "Composite XY" ) ;
comp2. Add ( new Leaf ( "Leaf XYA" ) ) ;
comp2. Add ( new Leaf ( "Leaf XYB" ) ) ;
root. Add ( comp) ;
comp. Add ( comp2) ;
root. Add ( new Leaf ( "Leaf C" ) ) ;
Leaf leaf = new Leaf ( "Leaf D" ) ;
root. Add ( leaf) ;
root. Remove ( leaf) ;
root. DisPlay ( 1 ) ;
Console. ReadKey ( ) ;
}
}
}