设计模式7—Prototype设计模式
来源:互联网 发布:阿里云 centos7 mysql 编辑:程序博客网 时间:2024/06/05 21:17
Prototype原型设计模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。Prototype原型模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何关于对象创建的细节。
原型模式的UML图如下:
Prototype模式例子如下:
//抽象原型类
abstract class Shape implements Colneable{
String shapeName;
public String getShapeName(){
return shapeName;
}
public void setShapeName(String shapeName){
this.shapeName = shapeName;
}
//实现了Colneable接口的类,可以使用clone()方法复制对象
public Object clone(){
try{
return super.clone();
}catch(CloneNotSupportedException e){
System.out.println("此对象不支持复制”);
}
return null;
}
}
//具体原型类
public class Circle extends Shape{
public Circle(){
setShapeName("Circle shape");
}
public static void main(String[] args){
Shape shape = new Circle();
System.out.println(shape.getShapeName());
//通过clone()方法获得一个对象拷贝
Shape shape2 = (Shape)shape.clone();
System.out.println(shape2.getShapeName());
}
}
clone()方法是在Object中定义的,而且是protected的,只有实现了Cloneable接口的类才可以在其实例上调用clone()方法,否则会抛出CloneNotSupportException。
为了获取对象的一份拷贝,我们可以利用Object类的clone()方法,也可以实现Cloneable接口,覆盖基类的clone()方法,在clone()方法中,调用super.clone()。
Cloneable接口是一个标记接口,也就是没有任何内容,定义如下:
package java.lang;
public interface Cloneable{
}
克隆只是实现Prototype原型模式的一种方法,也可以直接通过new对象的方式创建原型实例,二者区别在于:
(1)通过new方式创建的原型和现存的实例对象没有任何联系。
(2)通过克隆方法创建的原型,虽然也是创建新对象,但是将原型实例对象的数据复制到了新的对象中,相当于使用被克隆对象的数据作为克隆对象的初始数据。
Prototype原型设计模式和Singleton单例设计模式是相对的,单例模式中,在整个程序生命周期里,单例模式类的实例对象只有一个。而Prototype原型设计模式则正好相反,每次都返回的是原型类的不同实例对象。
JDK中原型模式的应用:
java.lang.Ojbect#clone()
java.lang.Cloneable
- 设计模式7—Prototype设计模式
- 设计模式:Prototype模式
- 设计模式-Prototype模式
- 设计模式-Prototype模式
- 设计模式 - Prototype 模式
- 设计模式-Prototype模式
- 设计模式--Prototype模式
- 设计模式7——Prototype设计模式
- 设计模式——原型模式(Prototype)
- Prototype模式——设计模式学习
- Prototype模式——设计模式学习
- C++设计模式——Prototype模式
- JAVA设计模式 — 原型模式(Prototype)
- 实现Prototype设计模式
- 实现Prototype设计模式
- 设计模式之Prototype
- 设计模式之Prototype
- Prototype设计模式
- 【Google Glass应用开发】 3. 运行应用
- 判断字符串是否为数字
- C2 Debug设置
- eclipse中将代码中某个相同的内容全部替换
- hd 2040 亲和数
- 设计模式7—Prototype设计模式
- HDU 4915 Parenthese sequence _(:зゝ∠)_ 呵呵
- 批量创建用户和邮箱
- 《有点失望》的经过及其背后意义
- 混合语言的游戏开发系统架构
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 解构Unity的腳本物件模型
- 两条像面试用的编程问题,和我的囧事
- 史上最强女游戏程序员