设计模式袖珍版 连续转载之 - Prototype(原型)

原创 2005年06月01日 00:47:00
<script type="text/javascript"> google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =240;google_ad_format = "120x240_as";google_ad_channel="8570654326";google_color_border = "CCCCCC";google_color_bg ="FFFFFF";google_color_link = "000000";google_color_url ="666666";google_color_text = "333333"; </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
原作:fanix

定义:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

如何使用?
因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单.

以勺子为例:
程序代码:

  1. public abstract class AbstractSpoon implements Cloneable
  2.   String spoonName; 
  3.   public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
  4.   public String getSpoonName() {return this.spoonName;}
  5.   public Object clone() 
  6.   {
  7.     Object object = null;
  8.     try {
  9.       object = super.clone();
  10.     } catch (CloneNotSupportedException exception) {
  11.       System.err.println("AbstractSpoon is not Cloneable");
  12.     }
  13.     return object;
  14.   }
  15. }
  16.  


有个具体实现(ConcretePrototype):
程序代码:

  1. public class SoupSpoon extends AbstractSpoon
  2.   public SoupSpoon()
  3.   {
  4.     setSpoonName("Soup Spoon"); 
  5.   }
  6. }


调用Prototype模式很简单:
程序代码:

AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon2 = spoon.clone(); 

当然也可以结合工厂模式来创建AbstractSpoon实例。

在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多模式上,如Interator遍历模式。

设计模式(创建型)之原型模式(Prototype Pattern)

要理解原型原型模式必须先理解Java里的浅复制和深复制。有的地方,复制也叫做克隆。Java提供这两种克隆方式。 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一...
  • yanbober
  • yanbober
  • 2015年04月29日 11:28
  • 3043

设计模式袖珍版 连续转载之 - Memento

原作:fanixMemento定义:memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.Memento模式相对也比较好理解,我们看下列代码:程序代码:p...
  • dazern
  • dazern
  • 2005年06月01日 00:56
  • 926

设计模式袖珍版 连续转载之 - Factory

原作:fanix定义:提供创建对象的接口.为何使用?工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为...
  • dazern
  • dazern
  • 2005年06月01日 00:46
  • 1039

设计模式袖珍版 连续转载之 - Proxy(代理)

原作:fanix理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣.Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系...
  • dazern
  • dazern
  • 2005年06月01日 00:50
  • 848

设计模式袖珍版 连续转载之 - Command

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • dazern
  • dazern
  • 2005年06月01日 01:08
  • 946

设计模式袖珍版 连续转载之 - Composite(组合)

原作:fanixComposite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.Composite比较容易理解,想到Composit...
  • dazern
  • dazern
  • 2005年06月01日 00:52
  • 969

设计模式袖珍版 连续转载之 - Interpreter(解释器)

原作:fanixInterpreter定义:定义语言的文法 ,并且建立一个解释器来解释该语言中的句子.Interpreter似乎使用面不是很广,它描述了一个语言解释器是如何构成的,在实际应用中,我们可...
  • dazern
  • dazern
  • 2005年06月01日 00:53
  • 842

设计模式袖珍版 连续转载之 - Builder

原作:fanixBuilder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型...
  • dazern
  • dazern
  • 2005年06月01日 00:48
  • 853

设计模式袖珍版 连续转载之 - Bridge

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • dazern
  • dazern
  • 2005年06月01日 00:54
  • 895

设计模式袖珍版 连续转载之 - State

             State的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 何时使用? State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If els...
  • dazern
  • dazern
  • 2005年06月01日 01:08
  • 1578
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式袖珍版 连续转载之 - Prototype(原型)
举报原因:
原因补充:

(最多只允许输入30个字)