Java Prototype模式的學(xué)習(xí)(原型模式)
原型模式定義: 用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象.
package com.pattern.prototype;

/**
* 原型類(lèi)(以湯匙為例) ,注意要實(shí)現(xiàn)Cloneable接口
*
* @author zdw
*
*/
public abstract class AbstractSpoon implements Cloneable
{
public String spoonName;

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

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

/**
* 重寫(xiě)clone()方法
*/
@Override
public Object clone()
{
try
{
return super.clone();
} catch (CloneNotSupportedException e)
{
System.out.println("此對(duì)象不支持復(fù)制");
}
return null;
}
}
對(duì)原型的具體實(shí)現(xiàn):
package com.pattern.prototype;

/**
* 給原型對(duì)象賦值
*
* @author zdw
*
*/
public class SoupSpoon extends AbstractSpoon
{
public SoupSpoon()
{
setSpoonName("chinaDrong");
}
}
測(cè)試類(lèi):
package com.pattern.prototype;

/*******************************************************************************
* 測(cè)試類(lèi)
*
* @author zdw
*
*/
public class Client
{
public static void main(String[] args)
{
AbstractSpoon spoon = new SoupSpoon();
System.out.println(spoon.getSpoonName());
// 通過(guò)對(duì)象的clone()方法,即可獲得對(duì)象的一個(gè)copy.
AbstractSpoon spoon2 = (AbstractSpoon) spoon.clone();
System.out.println(spoon2.getSpoonName());
}
}
Prototype模式允許一個(gè)對(duì)象再創(chuàng)建另外一個(gè)可定制的對(duì)象,根本無(wú)需知道任何如何創(chuàng)建的細(xì)節(jié),工作原理是:通過(guò)將一個(gè)原型對(duì)象傳給那個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象,這個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象通過(guò)請(qǐng)求原型對(duì)象拷貝它們自己來(lái)實(shí)施創(chuàng)建。
如何使用? 因?yàn)镴ava中的提供clone()方法來(lái)實(shí)現(xiàn)對(duì)象的克隆,所以Prototype模式實(shí)現(xiàn)一下子變得很簡(jiǎn)單.
以勺子為例:







































對(duì)原型的具體實(shí)現(xiàn):
















測(cè)試類(lèi):



















當(dāng)然也可以結(jié)合工廠模式來(lái)創(chuàng)建AbstractSpoon實(shí)例。
在Java中Prototype模式變成clone()方法的使用,由于Java的純潔的面向?qū)ο筇匦裕沟迷贘ava中使用設(shè)計(jì)模式變得很自然,兩者已經(jīng)幾乎是渾然一體了。這反映在很多模式上,如Interator遍歷模式。
posted on 2008-05-26 09:39 々上善若水々 閱讀(1685) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 設(shè)計(jì)模式