设计模式_11_原型模式(prototype)深拷贝、浅拷贝
设计模式_11_原型模式(prototype)
浅拷贝:
package designPatternOf23;
/**
* 定义:用原型实例,指定创建对象的种类,并通过拷贝这些原型创建新的对象
* Prototype类条件:实现Cloneable接口才可以被拷贝。
* 重写Object类的clone方法,将拷贝的protected对象改为public
* 有点适用场景:1、是object的基本方法,直接操作内存,复制大对象时,提升性能明显。
* 2、简化创建,重复创建相似对象用
* 注意:1、使用原型,不会调用父类构造方法。
* 2、访问权限对clone无效,单例中private实现,因此有冲突
* 3、深拷贝、浅拷贝。浅拷贝:
* clone只会拷贝对象中“基本数据类型”,对于数组、容器对象、引用对象等都不会拷贝。
* 深拷贝需在原型模式中另行拷贝
* */
//第01步:编写原型类
public class _05Prototype implements Cloneable { //重写:clone方法,将Object类的protect改为public
@Override
public _05Prototype clone() throws CloneNotSupportedException {
_05Prototype prototype=(_05Prototype)super.clone();
return prototype;
} }
package designPatternOf23; //第02步:编写子类:浅拷贝
public class _05ConcretePrototype_01 extends _05Prototype{
public void show(){
System.out.println("内部内方法show执行");
}
}
package designPatternOf23;
//第03步:编写调用类:浅拷贝
public class _05Client_01 {
public static void main(String[] args) {
_05ConcretePrototype_01 cp=new _05ConcretePrototype_01();
for(int i=;i<;i++){
try {
_05ConcretePrototype_01 cloneCP=(_05ConcretePrototype_01)cp.clone();
cloneCP.show();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
}
深拷贝:
package designPatternOf23;
/**
* 定义:用原型实例,指定创建对象的种类,并通过拷贝这些原型创建新的对象
* Prototype类条件:实现Cloneable接口才可以被拷贝。
* 重写Object类的clone方法,将拷贝的protected对象改为public
* 有点适用场景:1、是object的基本方法,直接操作内存,复制大对象时,提升性能明显。
* 2、简化创建,重复创建相似对象用
* 注意:1、使用原型,不会调用父类构造方法。
* 2、访问权限对clone无效,单例中private实现,因此有冲突
* 3、深拷贝、浅拷贝。浅拷贝:
* clone只会拷贝对象中“基本数据类型”,对于数组、容器对象、引用对象等都不会拷贝。
* 深拷贝需在原型模式中另行拷贝
* */
//第01步:编写原型类
public class _05Prototype implements Cloneable { //重写:clone方法,将Object类的protect改为public
@Override
public _05Prototype clone() throws CloneNotSupportedException {
_05Prototype prototype=(_05Prototype)super.clone();
return prototype;
} }
package designPatternOf23; import java.util.ArrayList; //第02步:编写子类:浅拷贝
public class _05ConcretePrototype_02 extends _05Prototype{
private ArrayList arrayList=new ArrayList();
_05ConcretePrototype_02 cp=null;
@Override
public _05Prototype clone() throws CloneNotSupportedException {
cp=(_05ConcretePrototype_02) super.clone();
cp.arrayList=(ArrayList) this.arrayList.clone();
return cp;
} public void show(){
System.out.println("内部内方法show执行");
}
}
package designPatternOf23;
//第03步:编写调用类:浅拷贝
public class _05Client_02 {
public static void main(String[] args) {
_05ConcretePrototype_01 cp=new _05ConcretePrototype_01();
for(int i=;i<;i++){
try {
_05ConcretePrototype_01 cloneCP=(_05ConcretePrototype_01)cp.clone();
cloneCP.show();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
}
设计模式_11_原型模式(prototype)深拷贝、浅拷贝的更多相关文章
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...
- 二十四种设计模式:原型模式(Prototype Pattern)
原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...
- 【UE4 设计模式】原型模式 Prototype Pattern
概述 描述 使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.如孙悟空猴毛分身.鸣人影之分身.剑光分化.无限剑制 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象, ...
- [设计模式] 4 原型模式 prototype
设计模式:可复用面向对象软件的基础>(DP)本文介绍原型模式和模板方法模式的实现.首先介绍原型模式,然后引出模板方法模式. DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...
- 设计模式 笔记 原型模式 prototype
//---------------------------15/04/07---------------------------- //prototype 原型模式--对象创建型模式 /* 1:意图: ...
- python 设计模式之原型模式 Prototype Pattern
#引入 例子1: 孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮 ...
- 设计模式五: 原型模式(Prototype)
简介 原型模式是属于创建型模式的一种,是通过拷贝原型对象来创建新的对象. 万能的Java超类Object提供了clone()方法来实现对象的拷贝. 可以在以下场景中使用原型模式: 构造函数创建对象成本 ...
- 【设计模式】—— 原型模式Prototype
前言:[模式总览]——————————by xingoo 模式意图 由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂模式就有些力不从心了.通过原型模式就可以通过拷贝函数clone一个原有的 ...
- 创建型设计模式之原型模式(Prototype)
结构 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或 ...
随机推荐
- POJ 1260 Pearls 简单dp
1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/a ...
- GridView合并表头、多重表头(转)
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { switch (e.Row.RowType) ...
- [LintCode] Copy Books 复印书籍
Given an array A of integer with size of n( means n books and number of pages of each book) and k pe ...
- JQuery小结
一.选择网页元素 jQuery的基本设计和主要用法,就是"选择某个网页元素,然后对其进行某种操作".这是它区别于其他函数库的根本特点. 使用jQuery的第一步,往往就是将一个选择 ...
- Eclipse设置注释模板
设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...
- HTML 表单和验证事件
1.表单验证<form></form> (1)非空验证(去空格) (2)对比验证(跟一个值对比) (3)范围验证(根据一个范围进行判断) (4)固定格式验证:电话号码,身份证号 ...
- MAC地址与IP地址的区别
介绍一下MAC地址的知识,MAC地址和IP地址的区别以及MAC地址在实际应用中所涉及到的安全问题. 一.基础知识 如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来 ...
- Ajax提交后台中文乱码问题
今天项目组同事反映,之前有一个正常的请求,今天突然后台获取参数的值出现了中文乱码,怀疑是之前更新jar包所致,笔者仔细想了想更新的内容,仿佛没有涉及到编码的变更啊,然后开始排查,首先后台加了强制以ut ...
- java类加载机制
使用某个类是发生的事情 加载->链接(验证.准备.解析)->初始化->可以使用 加载:将class文件字节码内容加载到内存当中,并将这些静态数据转换成方法区中的运行时数据结构 在堆中 ...
- remove 清除binlog
#!/bin/bash DATACFG=/etc/my.cnf DATADIR=`awk /^datadir/ $DATACFG|awk -F"=" '{print $2}'` D ...