原型模式(Prototype Pattern)--对象的克隆
- 定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象;
- 原型类的核心在于如何实现克隆方法:
- 能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个类支持被复制;
- 通用实现方法;
- 利用Object类的clone()方法;
// 1. 通用实现方法
// 通用的克隆实现方法是在具体原型类的克隆方法中实例化一个与自身类型相同的对象并将其返回,并将相关
// 参数传入新创建的对象中,保证它们的成员属性相同
class ConcretePrototype implements Prototype{
private String attr; // 成员属性
public void setAttr(String attr){
this.attr = attr;
}
public String getAttr(){
return this.attr;
}
// 克隆方法
public Prototype clone(){
Prototype prototype = new ConcretePrototype(); // 创建新对象
prototype.setAttr(this.attr);
return prototype;
}
}
// 使用: 只需要创建一个ConcretePrototype对象作为原型对象,然后调用其clone()方法即可得到对应的克隆对象
Prototype obj1 = new ConcretePrototype();
obj1.setAttr("Hello");
Prototype obj2 = obj1.clone();
// 2. 利用Object类的clone()方法
// 在派生类中覆盖基类的clone()方法,并声明为public;
// 在派生类的clone()方法中,调用super.clone();
// 派生类需实现Cloneable接口;
// Object类相当于抽象原型类,所有实现了Cloneable接口的类相当于具体原型类;
class ConcretePrototype implements Cloneable{
...
public Prototype clone(){
Object object = null;
try{
object = super.clone();
return (Prototype)object;
} catch(CloneNotSupportedException exception){
System.err.println("Not support cloneable");
return null;
}
}
...
}
参考资料:
原型模式(Prototype Pattern)--对象的克隆的更多相关文章
- 设计模式系列之原型模式(Prototype Pattern)——对象的克隆
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 原型模式(Prototype)(对象、克隆广告邮件)
有些对象创建过程较为复杂,而且有些时候需要频繁的创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后复制这个原型对象的方法创建更多同类型的对象.这就是原型模式的动机. 原型模式的主要思想 ...
- Net设计模式实例之原型模式( Prototype Pattern)
一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...
- 二十四种设计模式:原型模式(Prototype Pattern)
原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...
- python 设计模式之原型模式 Prototype Pattern
#引入 例子1: 孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮 ...
- 【UE4 设计模式】原型模式 Prototype Pattern
概述 描述 使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.如孙悟空猴毛分身.鸣人影之分身.剑光分化.无限剑制 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象, ...
- 六个创建模式之原型模式(Prototype Pattern)
定义: 使用原型实例指定创建对象的种类,并通过拷贝这个原型的属性创建新的对象. 结构图: Prototype:抽象原型类,声明克隆方法的接口,并是所有原型类的公共父类.在Java中,Object类为该 ...
- C#设计模式——原型模式(Prototype Pattern)
一.概述 在软件开发中,经常会碰上某些对象,其创建的过程比较复杂,而且随着需求的变化,其创建过程也会发生剧烈的变化,但他们的接口却能比较稳定.对这类对象的创建,我们应该遵循依赖倒置原则,即抽象不应该依 ...
随机推荐
- shell学习笔记之命令(四)
命令的类型:1>.外部命令:在命令提示符中执行的普通命令.2>.内置命令:内置命令是在shell内部实现的. 1.break命令 #!/bin/sh rm -rf fred* echo & ...
- dp之多重背包poj1276
题意:有现今cash,和n种钱币,每种钱币有ni个,价值为di,求各种钱币组成的不超过cash的最大钱数....... 思路:二进制拆分转化为01背包,或者转化为完全背包都是可以的. 反思:这个题目我 ...
- linux和windows动态库加载路径区别
# linux和windows动态库加载路径区别 ### 简介------------------------------ linux加载动态库的路径是系统目录/lib和/usr/lib.- wind ...
- PHP——分页显示数据库内容
test.php <?php header("Content-Type:text/html;charset=utf-8"); //加载分页类 include "pa ...
- 使用JavaScript获取select元素选中的value和text
示例代码如下(js直接写在了html里面,没有写在一个单独的外部文件中): <!DOCTYPE html> <html> <head> <meta name= ...
- tp 批量转码
读取王正东成功,然后把乱码一条一条的改回来... 专门针对mssql数据库的!!!
- Android Studio 工具栏添加图标
本文中 Android Studio 的版本为 Android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异.在工具栏中添加一些常用的图标有利于我们开发,举例说明: ...
- db2 improt from coldel0x7c
db2 load from "C:\20110816\20110816_BankEnterpri seCA.txt" OF del modified by coldel0x7c r ...
- windows CMD命令大全及详细解释和语法
http://blog.csdn.net/god_7z1/article/details/51173067
- python定义函数时的默认返回值
python定义函数时,一般都会有指定返回值,如果没有显式指定返回值,那么python就会默认返回值为None, 即隐式返回语句: return None 执行如下代码 def now(): prin ...