设计模式_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. Maven_根据不同个环境打包, 获取不同的配置文件等等

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  2. Node.js ejs中文手册

    express 中使用 //设置模板目录 app.set('views', path.join(__dirname, 'views')); //设置模板引擎 app.set('view engine' ...

  3. CAS单点登录中文用户名乱码问题

    CAS单点登录中文用户名乱码问题,有两种情况 1. CAS server乱码 即在向server端提交用户名和密码时,发生了乱码,解决方法是: 打开WEB-INF/web.xml,在其它的Filter ...

  4. ado.net 属性扩展 综合练习

    实现数据查询,添加,删除,修改各项功能 业务逻辑层: using System; using System.Collections.Generic; using System.Linq; using ...

  5. oracle 学习摘录

    (1)oracle插入回车换行符 SQL>insert into A t(t.name) values('aaaaa'||chr(10)||chr(13)||'ccccc'); 已创建 1 行. ...

  6. zju(6)中断控制实验

    1.实验目的 1.学习和掌握Linux下中断驱动的写法: 二.实验内容 1.编写EduKit-IV实验箱Linux操作系统下按键key的驱动: 2.编写EduKit-IV实验箱Linux操作系统下按键 ...

  7. vpn分类[转]

    目前常用的几种移动拨号的VPN技术及优势和劣势1)                WEB SSL优点:1.使用简单:每个终端用户不需要安装客户端,使用起来方便,不需要维护终端用户,通过IE直接来访问. ...

  8. Web前端开发基础 第四课(CSS小技巧)

    水平居中设置-行内元素 我们在实际工作中常会遇到需要设置水平居中场景,今天我们就来看看怎么设置水平居中的. 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align:c ...

  9. BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

  10. CSS权威指南 - 基本视觉格式化 4

    改变元素显示 没有讨论与表格相关的.列表list-item的值.之后讨论. 改变显示角色 显示为块级元素 将一串链接(行内元素)改变垂直放置,若有如下一连串的链接: <div id=" ...