原型模式(prototype pattern)

原型模式是一种创建型模式,它通过复制已经存在的实例来产生新的实例,而不是创建新的实例。
原型模式的好处:
1.可以像抽象工厂设计模式一样,不需要在客户端程序创建对象的子类。创建值相等,只是命名不一样的同类数据。
2.对一个给定的应用,使用标准方法创建类的实例的消耗是过高的。而原型法可以消除这种消耗,毕竟复制一个已经存在的实例使程序运行更高效。
原型模式的实现
首先,声明一个包含 clone()的抽象的基类;然后,任何需要动态构造的类继承这个抽象类,并实现clone()方法。
然后,应用程序就可以在原型中调用clone()方法构造类,或者通过传递特定的参数使用工厂方法类构造特定的类,又或者由其他设计模式提供的机制来调用clone()方法来构造类。而不用使用new这样的操作。
原型模式的结构和角色:
[img]http://dl.iteye.com/upload/attachment/499871/67a7b5f4-8e06-3a64-b2d7-da52acce00b1.jpg[/img]
/**
* 原型类
*/
abstract class PrototypeFactory implements Cloneable {
public Object clone() throws CloneNotSupportedException {
// call Object.clone()
PrototypeFactory copy = (PrototypeFactory) super.clone();
//In an actual implementation of this pattern you might now change references to
//the expensive to produce parts from the copies that are held inside the prototype.[img][/img]
return copy;
}

abstract void prototypeFactory(int x);

abstract void printValue();
}

/**
* 复制的具体实例
*/
class PrototypeImpl extends PrototypeFactory {
int x;

public PrototypeImpl(int x) {
this.x = x;
}

@Override
void prototypeFactory(int x) {
this.x = x;
}

@Override
public void printValue() {
System.out.println("Value :" + x);
}
}

/**
* 应用程序
*/
public class PrototypeExample {

private PrototypeFactory example;

public PrototypeExample(PrototypeFactory example) {
this.example = example;
}

public PrototypeFactory makeCopy()
throws CloneNotSupportedException {
return (PrototypeFactory) this.example.clone();
}

public static void main(String args[]) {
try {
PrototypeFactory tempExample = null;
int num = 1000;
PrototypeFactory prot = new PrototypeImpl(1000);
PrototypeExample cm = new PrototypeExample(prot);
for (int i = 0; i < 10; i++) {
tempExample = cm.makeCopy();//原型的复制
tempExample.prototypeFactory(i * num);
tempExample.printValue();
}
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}

/*
**输出:**

Value :0
Value :1000
Value :2000
Value :3000
Value :4000
Value :5000
Value :6000
Value :7000
Value :8000
Value :9000
*/

参考:《设计模式》《维基百科》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值