《JAVA与模式》第6天―原型模式 (二)

2014-11-24 08:24:30 · 作者: · 浏览: 7
*
* 构造方法,传入需要使用的原型接口对象
*/
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
* @创建时