* 构造方法,传入需要使用的原型接口对象
*/
public testPrototype(Prototype prototype) {
this.prototype = prototype;
}
public void operation() {
// 需要创建原型接口的对象
System.out.println("获取的原型为:"+this.prototype.clone().getClass().getSimpleName()+".java");
}
}
运行结果:
[html]
获取的原型为:ConcretePrototype1.java
获取的原型为:ConcretePrototype1.java
登记形式的原型模式
作为原型模式的第二种形式,它多了一个原型管理器(PrototypeManager)角色,该角色的作用是:创建具体原型类的对象,并记录每一个被创建的对象。
源代码
抽象原型角色
[java]
package com.bankht.Prototype.register;
/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午04:53:29
*
* @类说明 :抽象原型角色
*/
public interface Prototype {
public Prototype clone();
public String getName();
public void setName(String name);
}
package com.bankht.Prototype.register;
/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午04:53:29
*
* @类说明 :抽象原型角色
*/
public interface Prototype {
public Prototype clone();
public String getName();
public void setName(String name);
}
具体原型角色
[java]
package com.bankht.Prototype.register;
/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午04:54:03
*
* @类说明 :具体原型角色
*/
public class ConcretePrototype1 implements Prototype {
private String name;
public Prototype clone() {
ConcretePrototype1 prototype = new ConcretePrototype1();
return prototype;
}
public String toString() {
return "Now in Prototype1 , name = " + this.name;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
}
package com.bankht.Prototype.register;
/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午04:54:03
*
* @类说明 :具体原型角色
*/
public class ConcretePrototype1 implements Prototype {
private String name;
public Prototype clone() {
ConcretePrototype1 prototype = new ConcretePrototype1();
return prototype;
}
public String toString() {
return "Now in Prototype1 , name = " + this.name;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
}
[java]
package com.bankht.Prototype.register;
/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午04:54:29
*
* @类说明 :具体原型角色
*/
public class ConcretePrototype2 implements Prototype {
private String name;
public Prototype clone() {
ConcretePrototype2 prototype = new ConcretePrototype2();
return prototype;
}
public String toString() {
return "Now in Prototype2 , name = " + this.name;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
}
package com.bankht.Prototype.register;
/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午04:54:29
*
* @类说明 :具体原型角色
*/
public class ConcretePrototype2 implements Prototype {
private String name;
public Prototype clone() {
ConcretePrototype2 prototype = new ConcretePrototype2();
return prototype;
}
public String toString() {
return "Now in Prototype2 , name = " + this.name;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
}
原型管理器角色保持一个聚集,作为对所有原型对象的登记,这个角色提供必要的方法,供外界增加新的原型对象和取得已经登记过的原型对象。
[java]
package com.bankht.Prototype.register;
import java.util.HashMap;
import java.util.Map;
/**
* @author: 特种兵—AK47
* @创建时