namespace _004原型模式
{
/*-------------------------------------------------抽象克隆方法-------------------------------------------------*/
public abstract class BaseColor<T> where T : BaseColor<T>
{
private int ColorID = -1;
protected BaseColor(int id)
{
ColorID = id;
}
public abstract T Clone();
public void ShowID()
{
Console.WriteLine("-----------------------------------");
Console.WriteLine(string.Format("ID : {0}", ColorID));
Console.WriteLine("-----------------------------------");
}
}
/*-------------------------------------------------抽象克隆方法-------------------------------------------------*/
/*-------------------------------------------------具体克隆方法-------------------------------------------------*/
public class Color : BaseColor<Color>
{
public Color(int id)
: base(id)
{
}
public override Color Clone()
{
return this.MemberwiseClone() as Color;
}
}
/*-------------------------------------------------具体克隆方法-------------------------------------------------*/
/*-------------------------------------------------原型管理类-------------------------------------------------*/
public class ColorManager
{
public ColorManager()
{
Colors = new Dictionary<string, Color>();
}
private Dictionary<string, Color> Colors;
public Color this[string key]
{
get { return Colors[key]; }
set { Colors[key] = value; }
}
}
/*-------------------------------------------------原型管理类-------------------------------------------------*/
internal class Program
{
private static void Main(string[] args)
{
ColorManager manager = new ColorManager();
manager["white"] = new Color(0);
manager["red"] = new Color(1);
Color white = manager["white"].Clone();
Color red = manager["red"].Clone();
white.ShowID();
red.ShowID();
/*
* 原型模式下的优点:可以直接从对象里取出自己想要的对象进行单独操作,省去构造等工序
*
* 缺点:需要clone方法
*
*
*/
Console.ReadKey();
}
}
}
{
/*-------------------------------------------------抽象克隆方法-------------------------------------------------*/
public abstract class BaseColor<T> where T : BaseColor<T>
{
private int ColorID = -1;
protected BaseColor(int id)
{
ColorID = id;
}
public abstract T Clone();
public void ShowID()
{
Console.WriteLine("-----------------------------------");
Console.WriteLine(string.Format("ID : {0}", ColorID));
Console.WriteLine("-----------------------------------");
}
}
/*-------------------------------------------------抽象克隆方法-------------------------------------------------*/
/*-------------------------------------------------具体克隆方法-------------------------------------------------*/
public class Color : BaseColor<Color>
{
public Color(int id)
: base(id)
{
}
public override Color Clone()
{
return this.MemberwiseClone() as Color;
}
}
/*-------------------------------------------------具体克隆方法-------------------------------------------------*/
/*-------------------------------------------------原型管理类-------------------------------------------------*/
public class ColorManager
{
public ColorManager()
{
Colors = new Dictionary<string, Color>();
}
private Dictionary<string, Color> Colors;
public Color this[string key]
{
get { return Colors[key]; }
set { Colors[key] = value; }
}
}
/*-------------------------------------------------原型管理类-------------------------------------------------*/
internal class Program
{
private static void Main(string[] args)
{
ColorManager manager = new ColorManager();
manager["white"] = new Color(0);
manager["red"] = new Color(1);
Color white = manager["white"].Clone();
Color red = manager["red"].Clone();
white.ShowID();
red.ShowID();
/*
* 原型模式下的优点:可以直接从对象里取出自己想要的对象进行单独操作,省去构造等工序
*
* 缺点:需要clone方法
*
*
*/
Console.ReadKey();
}
}
}