設計模式之Prototype(原型)

原创 2004年06月24日 19:48:00

定義:

用原型實例指定創建物件的種類,並且通過拷貝這些原型創建新的物件。

Prototype 模式允許一個物件再創建另外一個可定制的物件,根本無需知道任何如何創建的細節,工作原理是:通過將一個原型物件傳給那個要發動創建的物件,這個要發動創建的物件通過請求原型物件拷貝它們自己來實施創建。

如何使用?

因為 Java 中提供的 clone() 方法來實現物件的克隆(具體瞭解clone()
按這裏),所以 Prototype 模式實現一下子變得很簡單。

以勺子為例:

public abstract class AbstractSpoon implements Cloneable
{
  String spoonName;

  public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
  public String getSpoonName() {return this.spoonName;}

  public Object clone()
  {
    Object object = null;
    try {
      object = super.clone();
    } catch (CloneNotSupportedException exception) {
      System.err.println("AbstractSpoon is not Cloneable");
    }
    return object;
  }
}
 

有兩個具體實現(ConcretePrototype):

public class SoupSpoon extends AbstractSpoon
{
  public SoupSpoon()
  {
    setSpoonName("Soup Spoon");
  }
}
 

public class SaladSpoon extends AbstractSpoon
{
  public SaladSpoon()
  {
    setSpoonName("Salad Spoon");
  }
}
 

運用 Prototype 模式很簡單:

AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon = new SaladSpoon();

當然也可以結合工廠模式來創建 AbstractSpoon 實例。

在 Java 中 Prototype 模式變成 clone() 方法的使用,由於 Java 純潔的物件導向特性,使得在 Java 中使用設計模式變得很自然,兩者已經幾乎是渾然一體了。這反映在很多模式上,如 Interator 遍歷模式。

設計模式之Prototype(原型)

定義:用原型實例指定創建物件的種類,並且通過拷貝這些原型創建新的物件。Prototype 模式允許一個物件再創建另外一個可定制的物件,根本無需知道任何如何創建的細節,工作原理是:通過將一個原型物件傳給...
  • alex197963
  • alex197963
  • 2007年05月12日 09:29
  • 686

Spring中原型prototype的准确使用

Spring中原型prototype的准确使用实际问题项目中,报表导出涉及到了在同一个类的两个不同方法中,都有相同的查询数据库的操作,一个方法是用于获取内容,一个是用于获取条数的,大概类似于这样:@S...
  • unifirst
  • unifirst
  • 2016年01月08日 17:04
  • 11573

JavaScript prototype原型和原型链详解

用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,...
  • i10630226
  • i10630226
  • 2015年10月21日 14:25
  • 1568

js:深入prototype(下:原型重写)

//当属性和方法特别多时,编写起来不是很方便,可以通过json的格式来编写 //由于原型重写,而且没有通过Person.prototype来指定,此时的constructor不会再指向Person而是...
  • Magneto7
  • Magneto7
  • 2014年05月03日 16:02
  • 2615

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

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

Android:原型设计

一、原型设计过程: 所谓原型设计,其实就是一款产品在未发布前的一个设计样品,模型,用来测试其功能的一个东西。它可以让系统设计者和用户提前了解产品功能以便更加精确的设计产品。 原型设计只是模拟了最终...
  • Jungle_hello
  • Jungle_hello
  • 2016年06月20日 23:46
  • 431

封装--javascript的原型(prototype)

这里介绍一种基于组合的对象定义为了解决原型所带来的问题,需要通过组合构造函数和原型来实现对象的创建:将属性在构造函数中定义,将方法在原型中定义。这样有效结合了基于原型链和构造函数来定义对象的有点,是目...
  • Yana_li
  • Yana_li
  • 2016年10月10日 20:27
  • 574

JS中定义对象方式四: 使用原型(prototype)方式创建对象之一

function Person() {} Person.prototype.username = "zhangsan"; Person.prototype.password = "...
  • Geek_ymv
  • Geek_ymv
  • 2013年03月13日 11:13
  • 2354

模式之--原型(Prototype)未完

行为目的: 通过对类实例的复制,得到一个新的实例。 问题起源: 实际应用中,如果需要创建的类其实例过程很昂贵和很复杂时,且需要的新实例相比之前的实例属性区别不多时,我们就可以通过复制已有的实例来...
  • murongyunlong
  • murongyunlong
  • 2015年04月12日 15:54
  • 169

JS----构造函数与原型prototype 区别

构造函数方法很好用,但是存在一个浪费内存 通过原型法分配的函数是所有对象共享的. 通过原型法分配的属性是独立.-----如果你不修改属性,他们是共享...
  • damys
  • damys
  • 2015年07月22日 17:16
  • 2007
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:設計模式之Prototype(原型)
举报原因:
原因补充:

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