Prototype
Code From TerryLee
using System;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
abstract class ColorPrototype
{

public abstract ColorPrototype Clone(bool Deep);

}


[Serializable]

class ConcteteColorPrototype : ColorPrototype
{


private int _red, _green, _blue;



public ConcteteColorPrototype(int red, int green, int blue)
{

this._red = red;

this._green = green;

this._blue = blue;

}

public override ColorPrototype Clone(bool Deep)
{

if (Deep)

return CreateDeepCopy();

else

return (ColorPrototype)this.MemberwiseClone();

}


//实现深拷贝

public ColorPrototype CreateDeepCopy()
{

ColorPrototype colorPrototype;


MemoryStream memoryStream = new MemoryStream();

BinaryFormatter formatter = new BinaryFormatter();


formatter.Serialize(memoryStream, this);

memoryStream.Position = 0;


colorPrototype = (ColorPrototype)formatter.Deserialize(memoryStream);

return colorPrototype;

}


public ConcteteColorPrototype Create(int red, int green, int blue)
{

return new ConcteteColorPrototype(red, green, blue);

}


public void Display(string _colorname)
{

Console.WriteLine("{0}'s RGB Values are: {1},{2},{3}",

_colorname, _red, _green, _blue);

}

}


class ColorManager
{

Hashtable colors = new Hashtable();

public ColorPrototype this[string name]
{

get
{

return (ColorPrototype)colors[name];

}

set
{

colors.Add(name, value);

}

}

}



class App
{

public static void Main(string[] args)
{

ColorManager colormanager = new ColorManager();


//初始化颜色

colormanager["red"] = new ConcteteColorPrototype(255, 0, 0);

colormanager["green"] = new ConcteteColorPrototype(0, 255, 0);

colormanager["blue"] = new ConcteteColorPrototype(0, 0, 255);

colormanager["angry"] = new ConcteteColorPrototype(255, 54, 0);

colormanager["peace"] = new ConcteteColorPrototype(128, 211, 128);

colormanager["flame"] = new ConcteteColorPrototype(211, 34, 20);


//使用颜色

string colorName = "red";

ConcteteColorPrototype c1 = (ConcteteColorPrototype)colormanager[colorName].Clone(false);

c1.Display(colorName);


colorName = "peace";

ConcteteColorPrototype c2 = (ConcteteColorPrototype)colormanager[colorName].Clone(true);

c2.Display(colorName);


colorName = "flame";

ConcteteColorPrototype c3 = (ConcteteColorPrototype)colormanager[colorName].Clone(true);

c3.Display(colorName);


Console.ReadLine();

}

}

















































































































































































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY