设计模式_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)深拷贝、浅拷贝的更多相关文章

  1. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

  2. 二十四种设计模式:原型模式(Prototype Pattern)

    原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...

  3. 【UE4 设计模式】原型模式 Prototype Pattern

    概述 描述 使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.如孙悟空猴毛分身.鸣人影之分身.剑光分化.无限剑制 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象, ...

  4. [设计模式] 4 原型模式 prototype

    设计模式:可复用面向对象软件的基础>(DP)本文介绍原型模式和模板方法模式的实现.首先介绍原型模式,然后引出模板方法模式. DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...

  5. 设计模式 笔记 原型模式 prototype

    //---------------------------15/04/07---------------------------- //prototype 原型模式--对象创建型模式 /* 1:意图: ...

  6. python 设计模式之原型模式 Prototype Pattern

    #引入 例子1: 孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮 ...

  7. 设计模式五: 原型模式(Prototype)

    简介 原型模式是属于创建型模式的一种,是通过拷贝原型对象来创建新的对象. 万能的Java超类Object提供了clone()方法来实现对象的拷贝. 可以在以下场景中使用原型模式: 构造函数创建对象成本 ...

  8. 【设计模式】—— 原型模式Prototype

    前言:[模式总览]——————————by xingoo 模式意图 由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂模式就有些力不从心了.通过原型模式就可以通过拷贝函数clone一个原有的 ...

  9. 创建型设计模式之原型模式(Prototype)

    结构   意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或 ...

随机推荐

  1. IOS面试题总结

    iOS面试题: 一:网络理论知识的理解 1:Internet物理地址和IP地址转换采用什么协议 ARP(Address Resolution Protocol)地址解析协议 2:Internet采用哪 ...

  2. NodeJS学习笔记之Connect中间件模块(一)

    NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...

  3. php归档函数(按时间)实现

    今日开发本站需要用到按时间归档文章的功能,即按文档发布时间将文章文类,以实现检索和统计功能,于是自己写了一个, 现分享给大家,相信大家工作和学习中有可能会用到,实现原理很简单,即取出文章发布时间戳的年 ...

  4. 1022. D进制的A+B (20)

    1022. D进制的A+B (20) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 输入两个非负10进制整数A和 ...

  5. Odoo Website 替换 谷歌地图为 百度地图

    由于众所周知的原因,国内使用谷歌地图是件非常痛苦的事,更为接地气的做法是替换为百度地图. 模块地址参见群公告. 演示地址:http://timesup.cn:8069

  6. 演示对sys用户和普通用户进行审计的示例

    1.确认数据库版本 1对SYS用户审计 1.1配置审计参数 1.2修改liunx日志配置文件 添加以下一列: 1.3 SYS 用户操作演示 2对普通用户审计 2.1配置审计参数 2.2演示对TEST用 ...

  7. The Earth Mover's Distance

    The EMD is based on the minimal cost that must be paid to transform one distribution into the other. ...

  8. WEB应用中的普通Java程序如何读取资源文件

    package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Serv ...

  9. 20145209&20145309信息安全系统设计基础实验报告 (5)

    班级:1452 1453 姓名:20145309李昊 20415209刘一阳 20145220韩旭飞 实验日期:2016.12.1 时间:10:10-12:30 实验序号:5 实验目的: 掌握在 AR ...

  10. rabbitmq之work_pool

    worker_pool_worker的作用是用来完成数据操作. 如何获取worker是从worker_pool里获取,并由worker_pool管理. 起动时间: -rabbit_boot_step( ...