设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype)
用原型实例指定创建对象的种类,并且通过复制这些原型,创建新的对象。
1、简单原型
1.1、说明:
(1)Prototype 产品抽象原型.接口;
(2)PrototypeA 原型.实现类;
(3)PrototypeB 原型.实现类。
1.2、Java实现,代码如下:
(1)Prototype
package com.java.designPattern.prototype.simplePrototype;
/**
* 抽象原型(接口)
*
*/
public abstract class Prototype implements Cloneable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return object;
}
}
(2)PrototypeA
package com.java.designPattern.prototype.simplePrototype;
/**
* 具体原型.实现类
*
*/
public class PrototypeA extends Prototype {
public PrototypeA() {
setName("prototpye A");
}
}
(3)PrototypeB
package com.java.designPattern.prototype.simplePrototype;
/**
* 具体原型.实现类
*
*/
public class PrototypeB extends Prototype {
public PrototypeB() {
setName("prototpye B");
}
}
(4)Test
package com.java.designPattern.prototype.simplePrototype;
/**
* 测试类
*
*/
public class Test {
public static void main(String[] args) {
Prototype prototypeA = new PrototypeA();
System.out.println(prototypeA.getName());
Prototype prototypeB = new PrototypeB();
System.out.println(prototypeB.getName());
}
}
输出:
prototpye A
prototpye B
2、有管理器的原型
2.1、说明:
(1)Prototype 产品抽象原型.接口;(同1)
(2)PrototypeA 原型.实现类;(同1)
(3)PrototypeB 原型.实现类;(同1)
(4)PrototypeManager 原型管理器。
2.2、Java实现,代码如下:
(1)Prototype
(2)PrototypeA
(3)PrototypeB
(4)PrototypeManager
package com.java.designPattern.prototype.prototypeManager;
import java.util.HashMap;
import java.util.Map;
/**
* 原型管理器
*
*/
public class PrototypeManager {
private static Map<String, Prototype> map = new HashMap<String, Prototype>();
private PrototypeManager() {
}
public synchronized static void setPrototype(String id, Prototype prototype) {
map.put(id, prototype);
}
public synchronized static Prototype getPrototype(String id) {
return map.get(id);
}
public synchronized static void removePrototype(String id) {
map.remove(id);
}
}
(5)Test
package com.java.designPattern.prototype.prototypeManager;
/**
* 测试类
*
*/
public class Test {
public static void main(String[] args) {
Prototype prototypeA = new PrototypeA();
Prototype prototypeB = new PrototypeB();
PrototypeManager.setPrototype("a", prototypeA);
PrototypeManager.setPrototype("b", prototypeB);
System.out.println(PrototypeManager.getPrototype("a").getName());
System.out.println(PrototypeManager.getPrototype("b").getName());
}
}
输出:
prototpye A
prototpye B