程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#設計模式之合成設計模式(Composite)(3)

C#設計模式之合成設計模式(Composite)(3)

編輯:關於C語言
、透明式的合成模式結構

與安全式的合成模式不同的是,透明式的合成模式要求所有的具體構件類,不論樹枝構件還是樹葉構件,均符合一個固定的接口。

這種形式涉及到三個角色:

抽象構件(Component)角色:這是一個抽象角色,它給參加組合的對象規定一個接口,規范共有的接口及默認行為。

樹葉構件(Leaf)角色:代表參加組合的樹葉對象,定義出參加組合的原始對象的行為。樹葉類會給出add()、remove()以及getChild()之類的用來管理子類對對象的方法的平庸實現。

樹枝構件(Composite)角色:代表參加組合的有子對象的對象,定義出這樣的對象的行為。

六、透明式的合成模式實現

以下示例性代碼演示了安全式的合成模式代碼:

// Composite pattern -- Structural example 
using System;
using System.Text;
using System.Collections;
// "Component"
abstract class Component
{
 // FIElds
 protected string name;
 // Constructors
 public Component( string name )
 { this.name = name; }
 // Methods
 abstract public void Add(Component c);
 abstract public void Remove( Component c );
 abstract public void Display( int depth );
}
// "Composite"
class Composite : Component
{
 // FIElds
 private ArrayList children = new ArrayList();
 // Constructors
 public Composite( string name ) : base( name ) {}
 // Methods
 public override void Add( Component component )
 { children.Add( component ); }
 public override void Remove( Component component )
 { children.Remove( component ); }
 public override void Display( int depth )
 {
  Console.WriteLine( new String( '-', depth ) + name );
  // Display each of the node's children
  foreach( Component component in children )
   component.Display( depth + 2 );
 }
}
// "Leaf"
class Leaf : Component
{
 // Constructors
 public Leaf( string name ) : base( name ) {}
 // Methods
 public override void Add( Component c )
 { Console.WriteLine("Cannot add to a leaf"); }
 public override void Remove( Component c )
 { Console.WriteLine("Cannot remove from a leaf"); }
 public override void Display( int depth )
 { Console.WriteLine( new String( '-', depth ) + name ); }
}
/**//// <summary>
/// ClIEnt test
/// </summary>
public class ClIEnt
{
 public static void Main( string[] args )
 {
  // Create a tree structure
  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 );
  root.Add( new Leaf( "Leaf C" ));
  // Add and remove a leaf
  Leaf l = new Leaf( "Leaf D" );
  root.Add( l );
  root.Remove( l );
  // Recursively display nodes
  root.Display( 1 );
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved