using System;
using System.Collections;
namespace ColorManager
{
//定义抽象原形prototype
abstract class ColorPrototype
{
//clone method 方法
abstract public ColorPrototype Clone();
}
//定义具体的原形
internal class Color:ColorPrototype
{
private int red,green,blue;
public Color(int red,int green,int blue)
{
this.red=red;
this.green=green;
this.blue=blue;
}
override public ColorPrototype Clone()
{
//create a 'shallow copy' 创建一个浅表拷贝
return (ColorPrototype)this.MemberwiseClone();
}
public void Display()
{
Console.WriteLine("RGB Values are:{0},{1},{2}",this.red,this.green,this.blue);
}
}
class ColorManager{
HashTable hashColor = new HashTable();
public ColorPrototype this [String colorname]
{
get{
return (ColorPrototype)hashColor[colorname];
}
set{
hashColor[colorname]=value;
}
}
}
//客户测试
class Client
{
[STAThread]
static void Main(String[]args){
ColorManager manager = new ColorManager();
manager["red"]= new Color(255,0,0);
manager["green"]= new Color(0,255,0);
manager["blue"]=new Color(0,0,255);
String red ="red";
manager[red].Clone().Display();
String green="green";
manager[green].Clone().Display();
}
}
}