原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例(clone),而不是新建(new)实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。
从原型模式的概念中,我们可以看到,在这个模式里,拷贝是个很重要的概念,即在不创建对象的情况下,返回一个已有对象,这就是拷贝去实现的,在面向对象的编程世界里,拷贝分为浅拷贝和深拷贝,如果希望对两者有更深入的认识,
可以阅读我的这篇文章《不忘本~浅拷贝和深拷贝》。
何时能用到它?
当你一个大对象被创建后,它可以在程序里被使用多次,而使用的时候可能有些属性值会发生变化,这里,你不需要重新去new这个对象,而可以使用原型模式去克隆这个对象,这样,可以提交程序的性能。
策略模式的结构图
aaarticlea/png;base64,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" alt="" />
策略模式实现说明
CarPrototype:抽象原型,定义一个克隆的方法,返回规定的原型
ConcteteCarPrototype:具体原型,实现了抽象原来的克隆,并返回了这类抽象原型,在具体原型中,还提供了某体的属性和方法等
CarManagerL:原型管理器,这个管理员用于被前台(UI)去调用,它用来存储原型集合
策略模式的C#实现
#region 原型模式
abstract class CarPrototype
{
public abstract CarPrototype Clone();
} class ConcteteCarPrototype : CarPrototype
{
private string _body, _color, _wheal;
public ConcteteCarPrototype(string body, string color, string wheal)
{
this._body = body;
this._color = color;
this._wheal = wheal;
}
public override CarPrototype Clone()
{
//实现浅表拷贝
return (CarPrototype)this.MemberwiseClone();
}
public void Display(string _carName)
{
Console.WriteLine("{0}'s Cart Values are: {1},{2},{3}",
_carName, _body, _color, _wheal);
}
} class CarManager
{
Hashtable colors = new Hashtable();
public CarPrototype this[string name]
{
get
{
return (CarPrototype)colors[name];
}
set
{
colors.Add(name, value);
}
}
} #endregion
调用代码
CarManager colormanager = new CarManager(); //初始化
colormanager["奥迪"] = new ConcteteCarPrototype("德国", "黑色", "四轮驱动");
colormanager["奇端"] = new ConcteteCarPrototype("中国", "白色", "前轮驱动"); //调用 ConcteteCarPrototype c1 = (ConcteteCarPrototype)colormanager["奇端"].Clone();
c1.Display("奇端"); Console.ReadLine();
结果截图
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZkAAABOCAIAAAB9i/y6AAAO60lEQVR4nO2dWVQVRxqAeY0xM5poJjEzGfcYNYD7LioaDYiAgApExB0UWY3ixi6rAu4GnbjEjZiYxSVjhOQmL2O2c8I5mTMPeZszgzkzR6OI3HsBp+bhb8qyuru6uu/lAs3/nf/k1P2prqpb3f2lumgSv59/uo2BgYHR08Ovy0eAgYGB4Xn4/fzT7T7DN3kYz47Y9OyIzRB9R27uOzKl78iUvq+lPKfEludGbfkdxOupv6cxOq0fxJi0fmPS+o9J7z8mvf/Y9P5j058fm/H8GxnPv5HxAoR/5gv+mQP8MwcEZA4IyBoQkDUwIGtgYNbAwK0DA7e+GLj1xXEQ7/xhvBIvjd/20gQlXp647eWJ2yEGTdo+aFL2oEnZgyZnvzI5+5XJO16ZvOOPUzpi6s4/0Zi261WI6btenb77zxAzdg+esXvwjD2DZ+wZPHPPkJl7hszMGTIrZ8isnKEQs3OHzs4dNjt3WFDusKC8YUF5w4Pyhs/JGz4nf8Sc/BFzlRg5t2DkPCVeCy6kMWp+4aj5RaPmF72+AGLv6wv2jn4Tonj0wuIxNBaVjO2IN94qVSKk1D+k1D+kzD+kzD+0LCC0LCC0PGBxecDi8sDF5YGLKwLDKgLDKsaFVYxbUjFuyb7xEOH7xofvnxC+f0IEROXEiMqJkUpMWloFMXlp1eSoaogpUdVToqunRB+YEn1gagzEwakxB6ctgzg0ffmTmLHisBKxh2fGHlEi7sisuCOz4o7Oij86K/7o7Pijs+OPzX77WBDEyuNBK4/PgUg4Pifh3bkJ785dBVEzb1XNvMSaeYk1wYk1wYknglefCF59Yv7qE/PXnIRYsObkgrV/gXhzHcR7C9e9t3A9xKlFG2icfmtjRySdDkk6o0TymdDks6HJZ0M3nV2sxPuLN78fpsS5sJRzSyC2nF+y5Xw4ROr5iNQLEakXItIuRKRdiEy7GJl2MTL9YmT6xaXpF5dmXIKIyrgUlVkblVkbnVkbnVUbnfVBdNYHMVkfxGyFuLzsHRofLt/2JFZs/wgiNvuj2OwrEHE7rsTt+Dhux8dxOz+OV+KT+F2fvA2x+9OVNPZ8lgCR81lCzmercq6uyrm6KvfqqtyribnXEvOuJeZdWw2Rf311/vU1+dfXFFxfU3BjTcGNtQU31hbeWFv4+drCz9cVfr6uCOKv6/cqsWHvzQ3FSmwsubmx5AuIpNIvkkpvJZXeSiq7lVx2K7msLrmsblN5R1TUb6ax78sUiP1fpuz/agtE5VeplV+lVjpSKx2pVY60Kkda1ddp1V+nVX+dDnHgm/QD32Qc+AZdhi5Dl6HL7OWy/KJSyVgYs7PP8GR0GboMXYYu644u+9u332vGt9/98N0PP377/Y+3v/sBMvlFpX2GrkeXocvQZeiy7uiyFnebZOQXlT7TpS4jhBBCOJdBknMZJC27DA5Hl1GXwYT4wGXQkQ9cBh1512XQZle5DHrv1S5rb2+vq2+Iybm8vKA2tuRS/P7zCYfO3mlsdLucNGZuOu12OTVdRhjAZVCmLmMreOIyRWRPr8sgya3LIAnrMqLC0GWKyKbtenW6IrV//fobPZy6DD52ocvYL6XpMvV3HxdWoU6Cy7gk6zLIwLoMynf+20RrTo05SMvTlh1Stz9jxWEu8ytzOOsyyMC6TN2OF10GDYLIaPtql0Fe0mVQGdZl3MgFLqN1PHQZNALrMvXUdZLL1B1tLLmpnOK7zTSZVHZLXbNTXPa4vb2uviH1yLWMmqtZpz5559yV7NrLki6DYcmsy6Cm71328sTthBCXu23QpO2Q95bLunZdBoPh1mWQZF3W8I9/E0LcrW3wI1iXQWb8kn2QnBCuiAzWZVA25TKqM+oyWJdBmbpsZuwR5UKXc9nff/mVEOJubYe8BZfBgWKXUZ15uC6DRugzJnyMTFcKgnUZVPCuy375511CSGubMnUWXAYHGq7LCCGtbY83FCsKg3UZYVxG12VQc1N5HeQ7xWVNzS119Q2552+Gl54IKT8YVl0VebQCXOZyOV3OFrfLGXmswmcug5redRmFfcaEjI1dBs+YhBB3axv7jMlOCDxjQlnvGRN+6mOXwTMmIcTd2m75GRMa7G0ug2dMQkhrW7vlZ0xoUMZlFPqMSXRcRumsZ8yHzS119Q2Lig+H7j8Qfqhy6fHymPeK7zQ2ulwuui5LvpGqdhl5GnAZ/SjjMlrZcF0G1bi9f0hye/+QZPf+2UEa7pdBNbr3Dx/VLqMfOZexfQ0PyoNCU7OTJqnLaIa6jJtP6jKaoS7jaoLL2IxZl7HPmJzLIEn3/uGjnssAul/GJmGzDMqaLoOP3N4/0XIZPZa6jJsQcBmbYV0GGXbvn61JXUYz1GVcL6zLIMPu/UNG7TJ6OOcyAEQGZbqqIoRQl3FjAJdBmdv7J1ouowdSl3ENgsvYjAWXgc4IiMynLnvkrKtvCKuqjjiyL6qmbPnporjzeXcaG1vdLvYxU35dBklDl0Gm3xil0Kkuc7mVhywLLgORUZ0J9ssgMyxIKcC6jJ4/dl0GmdeCC2mBuoxbl0Fy9MJiKHhrXUafOrm9f0iKXQYiozoz6zIQGdWZWZdBteAOo7Euk1yXQVLtspCkM1AQ7JdBZknKOaVg0mVQjsqshQK3LoMC1VlrW/vybR9CkhVZbPYVKNB1GXw0dBlUS8hRCqzLPHzGhMqGLqM1O9dlkccqYk6WrDhb+PaFnMTLO+40NrqdLT5wGUXgMqjAvZMBSe6dDEhy72SQjv0yw99jwuHsOxnEksvYZ0xCSFOzk3vGhJqcy0bNL6Kz4QOX6f0eExoBl0GZfSeD6Lhs2rInOmN/j0mTYpdBWf1OBtFxGYU+Y9KM2GWQ4d7JgKRll0GZeycDkpouo5h1Gbsuo8+Y8FH9TgbRcRmFPmPSjCf7ZezvMYlwv6wTf48JLlt2am/cufyVl3av/ih73adb7zQ2ft+By+l88OD+/d/uddK6zHDvH2p67jL4aXd2GeyXQdKXLoMDveIy7p0MSNJ3MoiXXKa3XwY/7eYu09svg4LMuozdL4OkvMv09svgpz177/9Ri+vs+1fq6hvYYF32qLn53r179+7eNbVfRghRv5MBqPfLCLMug4/ecpm6d8HeP2RkXMY2aLhfBnB7/zTvrf0yeCeDJsFlbDVwGZvhXEahz5jwsatcxg5Jc7+MPP2MSWHfyaBJQ5cB6v0yQgi3X/Yf5oUDTZdx42HfyWDzevtlsPfPNaK1WabrMraa5n4ZefoZk8K+k0GT4DIod+t3Mn5rcpLHbkJa292PyGMXIY8Jaf1fW4vL2eJsaXn4sOn+g/sPHtx/2PSgS96VhW/OvfcPSe69f0hafu8fDsf3/uneP0yID977h4588N4/dOTd9/6hTd+89w99waKM9QK+96+4bOeeQs2/viwu21dSXlXAZN5cmol/w9R7XIZ/w9QN/4bpKYXh3zDx/52MYUnPDF0vE32Grse/LUeXocvw7zG7q8vwv/mDLkOXocvQZegydBm6DF3WxS7DwMDA6Onh9/NPt/MQBEF6OIrL5iAIgvRknrjMTwuHw6GZN6xgeCDSG+iqy0CyX68Mz9QtIJ/0Ir3lZvTQZVwdWlYXkF6I+Ow75PBup9ZqWmjH86R6EqxNUW+5BzmXWbiwHOgyRAfx2Ze5NsxeP6ZE5hV1anaq145eTcmJMqym+UV6yz0oWJeJZ1nzIkCXISw+c5ng376ahpJ3jeUe1beG5pAc+neZzN3kxTns8ei5zGHJ64aXkeaFZQHBZdpJcNef5DXk40F2OTJ3NVtZfIifGZfJ/1SvcmefJnX7DuFd5tBxmfgorgXxKbAVmi4TT7oa+QnyymyyjXjYoLWRm+rU5hfQ04itYegUsxeeZDX1zS8QqIWTq3eU5vd1qAwlri8oWJgcO1+K1GWGZ5c7Z6auD7amh7PpxQZNHctWtnxgj0N9Bg3rW/4omZHp12yzhgOTadmhrx51Uq8L7jITF9Q3guZ9pzkMGyL+PSaL4HxLXoJ6d4V69sXDEF8HXAU2w51gzRMv069eFzLf2kI7puZHr77ePIjbN9Wvn1WXqc+FQ+s+lO/X8KemxinZsnrMepPMngjxIE3Vl0nKf7Weh2WX+emcM82a4ma5a1q+vmQd9lIw252pcWrm9QbjYdnsmP105sGT9jV7tPxRMqPXrxhPxinfL3e4ZjvcGZHskZ4s8SDle7QhapfpXQeCC4K7GcSXkRrJaoaV9fplM9w3stavXvuaDWpW1isLxi85TsF4NOdB0K8FuMNNfaQZh/l7T1xN76QIkOlUb6jqgvgQme64mnoHGmY8PL/dGk2XsRUEJ0bvylP/UwbJa4irxt2T4jrWelRXlikbDljmWAujNTsP4mYdHRj2y9XXg6usPlyvYNivqZ/KfyP5fiUHz06FzNxy9dmW9eZTc1SCIdmELncZezolbxvNQwTt6DVr6pLyY64qvcY125Gsb7YsHqRh15LjV39fw97NfnToo3mI3reQH5VhfXUdQb/cgNkDNVvgkoLe1W2q58SwLD4FtsKTZ0yuvp/WjEteNHrXiqlDuJGwBb3GrfUraISbMb2ZNKxv+GUNByk/D2bbl0fcoEx3elPhYUdmu5bp17AXh+qOkG9QfbVwdRwqZIZkKzz5PabezKr/ifROvOsygW071WWS/Ur2YuEQP7m7SdN9ku3bARmXyc8LugxhMbz3ZJDsyGwjXula71IXXPxcUtwp146pcUqOxz5IrsskZ0HzPFkbGGIDxGdfXhY+6MgarGUkOzU7GGuDlx+PfZB/xkQQBOm+oMsQBLED6DIEQewAugxBEDuALkMQxA6gyxAEsQPoMgRB7AC6DEEQO4AuQxDEDqDLEASxA+gyBEHsALoMQRA7YPj/YerqASIIgkiALkMQxA6gyxAEsQPoMgRB7ADu/SMIYgfQZQiC2AF0GYIgdgBdhiCIHUCXIQhiB9BlCILYAXQZgiB2AF2GIIgdQJchCGIH0GUIgtgBdBmCIHYAXYYgiB1AlyEIYgfQZQiC2AF0GYIgdgBdhiCIHUCXIQhiB9BlCILYAXQZgiB2AF2GIIgdQJchCGIH0GUIgtgBdBmCIDbg/53xmLNPin/HAAAAAElFTkSuQmCC" alt="" />