用意:通過給出一個(gè)原型對象來指明所要?jiǎng)?chuàng)建的對象的類型,然后用復(fù)制這個(gè)原型對象的辦法創(chuàng)建出更多同類型的對象。

1. com.cleversoft.designpatterns.prototype.Prototype.java:

package ?com.cleversoft.designpatterns.prototype;

interface ?Prototype? {
????Object?clone();

????String?getName();

????
void ?execute();
}

2. com.cleversoft.designpatterns.prototype.This.java:
package?com.cleversoft.designpatterns.prototype;

class?This?implements?Prototype?{
????
public?Object?clone()?{
????????
return?new?This();
????}


????
public?String?getName()?{
????????
return?"This";
????}


????
public?void?execute()?{
????????System.out.println(
"This:?execute");
????}

}

3. com.cleversoft.designpatterns.prototype.That.java:
package?com.cleversoft.designpatterns.prototype;

class?That?implements?Prototype?{
????
public?Object?clone()?{
????????
return?new?That();
????}


????
public?String?getName()?{
????????
return?"That";
????}


????
public?void?execute()?{
????????System.out.println(
"That:?execute");
????}

}

4. com.cleversoft.designpatterns.prototype.PrototypesModule.java:
package?com.cleversoft.designpatterns.prototype;

class?PrototypesModule?{
????
private?static?Prototype[]?prototypes?=?new?Prototype[9];

????
private?static?int?total?=?0;

????
public?static?void?addPrototype(Prototype?obj)?{
????????prototypes[total
++]?=?obj;
????}


????
public?static?Object?findAndClone(String?name)?{
????????
for?(int?i?=?0;?i?<?total;?i++)
????????????
if?(prototypes[i].getName().equals(name))
????????????????
return?prototypes[i].clone();
????????System.out.println(name?
+?"?not?found");
????????
return?null;
????}

}

5. com.cleversoft.designpatterns.prototype.Main.java:
package?com.cleversoft.designpatterns.prototype;

public?class?Main?{
????
public?static?void?initializePrototypes()?{
????????PrototypesModule.addPrototype(
new?This());
????????PrototypesModule.addPrototype(
new?That());
????}


????
public?static?void?main(String[]?args)?{
????????initializePrototypes();
????????Object[]?objects?
=?new?Object[9];
????????
int?total?=?0;

????????
for?(int?i?=?0;?i?<?args.length;?i++)?{
????????????objects[total]?
=?PrototypesModule.findAndClone(args[i]);
????????????
if?(objects[total]?!=?null)
????????????????total
++;
????????}

????????
for?(int?i?=?0;?i?<?total;?i++)
????????????((Prototype)?objects[i]).execute();

????}

}


參考資料:
1. 《Java與模式》
2. http://terrylee.cnblogs.com/archive/2006/01/16/317896.html
3. Design Patterns With Code
4. Thinking in Patterns

歡迎大家訪問我的個(gè)人網(wǎng)站 萌萌的IT人