Java 实现原型(Prototype)模式
public class BaseSpoon implements Cloneable {//spoon 匙, 调羹
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected BaseSpoon clone() throws CloneNotSupportedException {
System.out.println("clone a BaseSpoon");
BaseSpoon object = null;
try {
object = (BaseSpoon) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
System.err.println("BaseSpoon is not Cloneable");
}
return object;
}
}
public class SaladSpoon extends BaseSpoon {
public SaladSpoon() {
setName("Salad Spoon");//沙拉 匙
}
}
public class SoupSpoon extends BaseSpoon {
public SoupSpoon() {
setName("Soup Spoon");//汤匙
}
}
/*
* 原型模式
* 用原型实例指定创建对象的种类。而且通过拷贝这些原型创建新的对象。 * Prototype原型模式是一种创建型设计模式。Prototype模式同意一个对象再创建另外一个可定制的对象,根本无需知道不论什么怎样创建的细节,
* 工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
* 在java中 体现为 clone() 对象
*/
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
//创建原型
BaseSpoon soup1 = new SoupSpoon();
BaseSpoon salad1 = new SaladSpoon();
//clone原型 得到新对象
SoupSpoon soup2 = (SoupSpoon) soup1.clone();
SaladSpoon salad2 = (SaladSpoon) salad1.clone();
//输出clone后原型和相应新对象的名字
System.out.println("clone 后:" + soup1.getName() + "-" + soup2.getName());
System.out.println("clone 后:" + salad1.getName() + "-" + salad2.getName()); soup1.setName("soup1 spoon");
salad1.setName("salad1 spoon");
soup2.setName("soup2 spoon");
salad2.setName("salad2 spoon"); System.out.println("属性又一次赋值后:" + soup1.getName() + "-" + soup2.getName());
System.out.println("属性又一次赋值后:" + salad1.getName() + "-" + salad2.getName());
}
}
Java 实现原型(Prototype)模式的更多相关文章
- 原型(Prototype)模式
原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是原型模式的用意.原型模式的结构 原型模式要求对象实现一个可以“克隆 ...
- 设计模式C++描述----08.原型(Prototype)模式
一. 概述 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 换句话说,就是不用重新初始化对象,而是动态地获得对象运行时的状态. 再说明白点,就是要一个拷贝过构造函数类似功能的接 ...
- 设计模式--原型(Prototype)模式
写这些也许有人认为“为了模式而模式”.Insus.NET所想到的,每个大师成为大师之前,也许都得这样做. 走路,从小就开始学,直至现在,谁还不是为了走路而走路?一直重复着...... 很多人没有分享自 ...
- 六、原型(Prototype)模式
原型模式是对象的创建模式,通过给出一个原型对象来指明所要创建的对象的类型.然后用复制这个原型对象的方法来创建出更多同类型的对象. 原型模式可以不用重新初始化对象,而动态的获取对象运行时的状态.使用原型 ...
- 克隆复制可使用原型( Prototype)设计模式
今天有学习设计模式的原型(Prototype)<设计模式--原型(Prototype)模式>http://www.cnblogs.com/insus/p/4152773.html .为了加 ...
- Java设计模式-原型模式(Prototype)
原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是选型模式的用意. 原型模式的结构 原型模式要求对象实现一个可以“克 ...
- Java设计模式(4)原型模式(Prototype模式)
Prototype模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是: ...
- 4.java设计模式-原型模式(prototype)
在<JAVA与模式>一书中开头是这样描述原型(Prototype)模式的: 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更 ...
- Java设计模式:Prototype(原型)模式
概念定义 使用原型实例指定待创建对象的种类,并通过拷贝该原型来创建新的对象.Prototype模式允许一个原型对象克隆(复制)出多个与其相同的对象,而无需知道任何如何创建的细节. 应用场景 对象的创建 ...
随机推荐
- POJ:3461-Oulipo(KMP模板题)
原题传送:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Description The F ...
- python中join()函数讲解
本文简述的是string.join(words[, sep]),它的功能是把字符串或者列表,元组等的元素给连接起来,返回一个字符串,和split()函数与正好相反,看下面的代码理解. a=[" ...
- BZOJ 2725: [Violet 6]故乡的梦
求出最短路径树,对于一个询问(x,y) 若不在树上S->T的链上,则答案不变,若在链上,考虑用一条非树边替换这条边,这条非树边必须跨越x->y这条边,线段树维护区间最小值 #include ...
- cf950e Data Center Maintenance
若推迟 \(u\) 必推迟 \(v\),则连边 <\(u,v\)>. 求强联通分量后缩点,答案显然是出度为 \(0\) 且 size 最小的 scc. #include <iostr ...
- app启动画面(prepo)
IPhone启动画面以及图标的设置 目前IPhone的分辨率为:320X480.640X960.640X1136. Default.png 320X480 iPh ...
- nw.js学习地址
http://blog.sina.com.cn/s/blog_600e56a60102vqj2.html https://github.com/nwjs/nw.js/wiki/Manifest-For ...
- NYOJ 745 蚂蚁的难题(二)
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种 ...
- hdu2055
#include <stdio.h> int init(char a){ if(a>='a'&&a<='z'){ ); }; } int main(){ int ...
- 九度oj 题目1262:Sequence Construction puzzles(I)_构造全递增序列
题目描述: 给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列. 输入: 输入的第一行包括一个整数N(1<=N<=10000). 接下来的一行是N个满足题目描述条件的整 ...
- 九度oj 题目1159:坠落的蚂蚁
题目描述: 一根长度为1米的木棒上有若干只蚂蚁在爬动.它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右.如果两只蚂蚁碰头,则它们立即交换速度并继续爬动.三只蚂蚁碰头,则两边的蚂蚁交换速度, ...