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

C#設計模式之原型設計模式(Prototype)(3)

編輯:關於C語言

四、帶Prototype Manager的原型模式

原型模式的第二種形式是帶原型管理器的原型模式,其UML圖如下:

客戶(ClIEnt)角色:客戶端類向原型管理器提出創建對象的請求。

抽象原型(Prototype)角色:這是一個抽象角色,通常由一個C#接口或抽象類實現。此角色給出所有的具體原型類所需的接口。在C#中,抽象原型角色通常實現了ICloneable接口。

具體原型(Concrete Prototype)角色:被復制的對象。此角色需要實現抽象的原型角色所要求的接口。

原型管理器(Prototype Manager)角色:創建具體原型類的對象,並記錄每一個被創建的對象。

下面這個例子演示了在原型管理器中存儲用戶預先定義的顏色原型,客戶通過原型管理器克隆顏色對象。

// Prototype pattern -- Real World example 
using System;
using System.Collections;
// "Prototype"
abstract class ColorPrototype
{
 // Methods
 public abstract ColorPrototype Clone();
}
// "ConcretePrototype"
class Color : ColorPrototype
{
 // FIElds
 private int red, green, blue;
 // Constructors
 public Color( int red, int green, int blue)
 {
  this.red = red;
  this.green = green;
  this.blue = blue;
 }
 // Methods
 public override ColorPrototype Clone()
 {
  // Creates a 'shallow copy'
  return (ColorPrototype) this.MemberwiseClone();
 }
 public void Display()
 {
  Console.WriteLine( "RGB values are: {0},{1},{2}",
   red, green, blue );
 }
}
// Prototype manager
class ColorManager
{
 // FIElds
 Hashtable colors = new Hashtable();
 // Indexers
 public ColorPrototype this[ string name ]
 {
  get{ return (ColorPrototype)colors[ name ]; }
  set{ colors.Add( name, value ); }
 }
}
/**//// <summary>
/// PrototypeApp test
/// </summary>
class PrototypeApp
{
 public static void Main( string[] args )
 {
  ColorManager colormanager = new ColorManager();
  // Initialize with standard colors
  colormanager[ "red" ] = new Color( 255, 0, 0 );
  colormanager[ "green" ] = new Color( 0, 255, 0 );
  colormanager[ "blue" ] = new Color( 0, 0, 255 );
  // User adds personalized colors
  colormanager[ "angry" ] = new Color( 255, 54, 0 );
  colormanager[ "peace" ] = new Color( 128, 211, 128 );
  colormanager[ "flame" ] = new Color( 211, 34, 20 );
  // User uses selected colors
  string colorName = "red";
  Color c1 = (Color)colormanager[ colorName ].Clone();
  c1.Display();
  colorName = "peace";
  Color c2 = (Color)colormanager[ colorName ].Clone();
  c2.Display();
  colorName = "flame";
  Color c3 = (Color)colormanager[ colorName ].Clone();
  c3.Display();
 }
}

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