设计模式_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)
结构 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或 ...
随机推荐
- ubuntu 装机及装机以后干的事情
一.装系统 下载ubuntu镜像 ubuntu 16.04 镜像下载(linux公社) 安装unetbootin (u盘启动盘制作工具) sudo apt-get install unetbootin ...
- jquery dialog open后,服务器端控件失效的快速解决方法
jquery dialog为我们提供了非常漂亮实用的对话框,比单调的alert.confirm.prompt好用很多. 在使用jquery与.net共同开发时,直接调用jquery dialog的op ...
- js中操作数组的一些方法【转】
增 push 在数组的末尾添加一个或多个元素,并返回新的长度. array.push(1,2,3.........) unshift 在数组的开头添加一个或多个元素,并返回新的长度. arra ...
- ArcGIS Engine中的数据访问
ArcGIS Engine中的数据访问 数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文 ...
- 11877 The Coco-Cola Store
题目: 11877 The Coco-Cola Store Once upon a time, there is a special coco-cola store. If you retur ...
- Android studio使用增量更新进行版本升级
今天将Android Studio更新了一下,特此记录一下升级过程,以后可能还会用得着. 首先通过菜单栏进入 Help --> Check for update 查看下当前版本是否需要更新.事实 ...
- java web(二) Tomcat数据源
一.数据源的产生 1.JDBC操作原理 (1) 加载数据库驱动程序(数据库驱动程序可通过classpath配置): Class.forName(); (2)通过DriverManager类取得数据库连 ...
- mapminmax的用法详解 _MATLAB
============外一篇 有关mapminmax的用法详解 by faruto==================================转自:http://www.ilovematla ...
- 抽象工厂模式(Abstract Factory)
GOF:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 类图:
- IOS第一天多线程-05GCD队列的使用
************** // // HMViewController.m // 08-GCD02-队列的使用(了解) // // Created by apple on 14-9-15. // ...