设计模式_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开发中的网络请求   今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...

  2. Maven_如何为开发和生产环境建立不同的配置文件 --我的简洁方案

    其实也是最近才看Maven, 以前都是用ant+ivy, 对于轻量级的项目来说足够了, 而且非常灵活. 看了看Maven, 约定.... 现在编程都说约定, 约定是挺好, 问题是超出约定的事情太多了, ...

  3. 总结新系统部署时,Oracle的一些注意事项:

    1.Oracle安装时,要选择字符集为中文编码,数据库重要角色设置密码时,不要用数字开头,不然后面会报一些错误提示 2.emp导出的数据dmp格式,导入时要在服务器导入,具体没有试,要找机会试试,转化 ...

  4. C#:实现快捷键自定义设置(转)

    项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示: 当我们相继按下Ctrl+Alt+M的时候,软件就会自动将快捷键显示在文本框中. 最终的效果如下图所示: private ...

  5. 关于Repeater嵌套绑定的问题

    前台代码: <div id="firstpane" class="menu_list">                <asp:Repeat ...

  6. JSP 连接MySQL 5.1

    //数据库为cc, 数据表emp/*CREATE DATABASE `cc` /*!40100 COLLATE 'utf8_unicode_ci' */ CREATE TABLE `emp` ( `e ...

  7. mysql查询缓存参数

    由人说mysql查询缓存是鸡肋,也许吧,但还是要看场景: 查询缓存: 开启查询缓存:/etc/my.cnfquery_cache_type=1 重启

  8. FZU1894 单调队列

    S - 1019 Time Limit:1500MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  9. Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)

      1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...

  10. Python强化训练笔记(一)——在列表,字典,集合中筛选数据

    列表,字典,集合中根据条件筛选数据,如下所示 列表:[-10,2,2,3,-2,7,6,9] 找出所有的非负数 字典:{1:90,2:55,3:87...} 找出所有值大于60的键值对 集合:{2,3 ...