【設計模式】之實例化原型模式

 

用意:通過給出一個原型對象來指明所要創建的對象的類型,然後用複製這個原型對象的辦法創建出更多同類型的對象。

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


2. com.cleversoft.designpatterns.prototype.This.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.prototype;
None.gif500)this.width=500" align=top border=0>
ExpandedBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>
class This implements Prototype {
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public Object clone() {
InBlock.gif500)this.width=500" align=top border=0>        
return new This();
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public String getName() {
InBlock.gif500)this.width=500" align=top border=0>        
return "This";
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public void execute() {
InBlock.gif500)this.width=500" align=top border=0>        System.out.println(
"This: execute");
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

ExpandedBlockEnd.gif500)this.width=500" align=top border=0>}

3. com.cleversoft.designpatterns.prototype.That.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.prototype;
None.gif500)this.width=500" align=top border=0>
ExpandedBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>
class That implements Prototype dot.gif500)this.width=500" border=0>{
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public Object clone() dot.gif500)this.width=500" border=0>{
InBlock.gif500)this.width=500" align=top border=0>        
return new That();
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public String getName() dot.gif500)this.width=500" border=0>{
InBlock.gif500)this.width=500" align=top border=0>        
return "That";
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public void execute() dot.gif500)this.width=500" border=0>{
InBlock.gif500)this.width=500" align=top border=0>        System.out.println(
"That: execute");
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

ExpandedBlockEnd.gif500)this.width=500" align=top border=0>}

4. com.cleversoft.designpatterns.prototype.PrototypesModule.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.prototype;
None.gif500)this.width=500" align=top border=0>
ExpandedBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>
class PrototypesModule {
InBlock.gif500)this.width=500" align=top border=0>    
private static Prototype[] prototypes = new Prototype[9];
InBlock.gif500)this.width=500" align=top border=0>
InBlock.gif500)this.width=500" align=top border=0>    
private static int total = 0;
InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public static void addPrototype(Prototype obj) {
InBlock.gif500)this.width=500" align=top border=0>        prototypes[total
++= obj;
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public static Object findAndClone(String name) {
InBlock.gif500)this.width=500" align=top border=0>        
for (int i = 0; i < total; i++)
InBlock.gif500)this.width=500" align=top border=0>            
if (prototypes[i].getName().equals(name))
InBlock.gif500)this.width=500" align=top border=0>                
return prototypes[i].clone();
InBlock.gif500)this.width=500" align=top border=0>        System.out.println(name 
+ " not found");
InBlock.gif500)this.width=500" align=top border=0>        
return null;
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

ExpandedBlockEnd.gif500)this.width=500" align=top border=0>}

5. com.cleversoft.designpatterns.prototype.Main.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.prototype;
None.gif500)this.width=500" align=top border=0>
ExpandedBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>
public class Main {
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public static void initializePrototypes() {
InBlock.gif500)this.width=500" align=top border=0>        PrototypesModule.addPrototype(
new This());
InBlock.gif500)this.width=500" align=top border=0>        PrototypesModule.addPrototype(
new That());
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    
public static void main(String[] args) {
InBlock.gif500)this.width=500" align=top border=0>        initializePrototypes();
InBlock.gif500)this.width=500" align=top border=0>        Object[] objects 
= new Object[9];
InBlock.gif500)this.width=500" align=top border=0>        
int total = 0;
InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockStart.gif500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>        
for (int i = 0; i < args.length; i++{
InBlock.gif500)this.width=500" align=top border=0>            objects[total] 
= PrototypesModule.findAndClone(args[i]);
InBlock.gif500)this.width=500" align=top border=0>            
if (objects[total] != null)
InBlock.gif500)this.width=500" align=top border=0>                total
++;
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>        }

InBlock.gif500)this.width=500" align=top border=0>        
for (int i = 0; i < total; i++)
InBlock.gif500)this.width=500" align=top border=0>            ((Prototype) objects[i]).execute();
InBlock.gif500)this.width=500" align=top border=0>
ExpandedSubBlockEnd.gif500)this.width=500" align=top border=0>    }

ExpandedBlockEnd.gif500)this.width=500" align=top border=0>}


參考資料:
1. 《Java與模式》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章