Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7594605 建立时间:2006年5月29日 |

| |
[设计模式]『蚂蚁学模式』之实例化原型模式 软件技术
lhwork 发表于 2007/1/10 9:23:58 |
用意:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。1. com.cleversoft.designpatterns.prototype.Prototype.java:
500)this.width=500'> package com.cleversoft.designpatterns.prototype;500)this.width=500'>500)this.width=500'>500)this.width=500'> interface Prototype 500)this.width=500'> {500)this.width=500'> Object clone();500)this.width=500'>500)this.width=500'> String getName();500)this.width=500'>500)this.width=500'> void execute();500)this.width=500'>} 2. com.cleversoft.designpatterns.prototype.This.java:
500)this.width=500'>package com.cleversoft.designpatterns.prototype;500)this.width=500'>500)this.width=500'>500)this.width=500'>class This implements Prototype 500)this.width=500'>{500)this.width=500'>500)this.width=500'> public Object clone() 500)this.width=500'>{500)this.width=500'> return new This();500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public String getName() 500)this.width=500'>{500)this.width=500'> return "This";500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public void execute() 500)this.width=500'>{500)this.width=500'> System.out.println("This: execute");500)this.width=500'> }500)this.width=500'>}3. com.cleversoft.designpatterns.prototype.That.java:
500)this.width=500'>package com.cleversoft.designpatterns.prototype;500)this.width=500'>500)this.width=500'>500)this.width=500'>class That implements Prototype 500)this.width=500'>{500)this.width=500'>500)this.width=500'> public Object clone() 500)this.width=500'>{500)this.width=500'> return new That();500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public String getName() 500)this.width=500'>{500)this.width=500'> return "That";500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public void execute() 500)this.width=500'>{500)this.width=500'> System.out.println("That: execute");500)this.width=500'> }500)this.width=500'>}4. com.cleversoft.designpatterns.prototype.PrototypesModule.java:
500)this.width=500'>package com.cleversoft.designpatterns.prototype;500)this.width=500'>500)this.width=500'>500)this.width=500'>class PrototypesModule 500)this.width=500'>{500)this.width=500'> private static Prototype[] prototypes = new Prototype[9];500)this.width=500'>500)this.width=500'> private static int total = 0;500)this.width=500'>500)this.width=500'>500)this.width=500'> public static void addPrototype(Prototype obj) 500)this.width=500'>{500)this.width=500'> prototypes[total++] = obj;500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public static Object findAndClone(String name) 500)this.width=500'>{500)this.width=500'> for (int i = 0; i < total; i++)500)this.width=500'> if (prototypes[i].getName().equals(name))500)this.width=500'> return prototypes[i].clone();500)this.width=500'> System.out.println(name + " not found");500)this.width=500'> return null;500)this.width=500'> }500)this.width=500'>}5. com.cleversoft.designpatterns.prototype.Main.java:
500)this.width=500'>package com.cleversoft.designpatterns.prototype;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class Main 500)this.width=500'>{500)this.width=500'>500)this.width=500'> public static void initializePrototypes() 500)this.width=500'>{500)this.width=500'> PrototypesModule.addPrototype(new This());500)this.width=500'> PrototypesModule.addPrototype(new That());500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public static void main(String[] args) 500)this.width=500'>{500)this.width=500'> initializePrototypes();500)this.width=500'> Object[] objects = new Object[9];500)this.width=500'> int total = 0;500)this.width=500'>500)this.width=500'>500)this.width=500'> for (int i = 0; i < args.length; i++) 500)this.width=500'>{500)this.width=500'> objects[total] = PrototypesModule.findAndClone(args[i]);500)this.width=500'> if (objects[total] != null)500)this.width=500'> total++;500)this.width=500'> }500)this.width=500'> for (int i = 0; i < total; i++)500)this.width=500'> ((Prototype) objects[i]).execute();500)this.width=500'>500)this.width=500'> }500)this.width=500'>}参考资料:1. 《Java与模式》2. http://terrylee.cnblogs.com/archive/2006/01/16/317896.html3. Design Patterns With Code4. Thinking in Patterns |
|
|