文档章节

设计模式-原型模式

song316
 song316
发布于 2016/08/13 11:28
字数 349
阅读 7
收藏 0

原型模式介绍

原型模式一般很少单独使用,一般和工厂方法模式一起组合使用.

类图

原型模式

优点

  1. 性能好.使用native方法直接在堆内存中拷贝,性能比new好很多.
  2. 规避构造函数的约束.直接拷贝内存,不会执行构造函数.

使用场景

  1. 比如需要在循环体内产生大量对象.
  2. 规避构造函数的约束.

场景举例

  • 信用卡账单邮件模板.

    根据模板生成一个对象, 每封邮件都是次对象的clone.

注意

  • 除基本类型外的其他类型(比如ArrayList,自定义对象等),都不会做拷贝.Clone对象和原对象的成员变量的引用相同.
  • final修饰的成员变量无法实现深拷贝.

浅拷贝和深拷贝

  • 只有java的基本类型才会拷贝,其他类型拷贝需要特殊处理,处理方式见下方代码.

基本拷贝

public class Test {
    public static void main(String[] args) {
        ConcretePrototype cp = new ConcretePrototype();
        for (int i = 0; i < 5; i++) {
            ConcretePrototype clone = (ConcretePrototype) cp.clone();
            clone.show();
        }
    }
}

class Prototype implements Cloneable {
    @Override
    public Prototype clone() {
        try {
            return (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
}

class ConcretePrototype extends Prototype {
    public void show() {
        System.out.println("原型模式实现!");
    }
}

深拷贝

class Thing implements Cloneable{
    private ArrayList<String> list = new ArrayList<>();
    @Override
    public Thing clone(){
        try {
            Thing thing = (Thing)super.clone();
            thing.list = (ArrayList<String>)this.list.clone();
            return thing;
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
}

© 著作权归作者所有

共有 人打赏支持
下一篇: Http客户端
song316
粉丝 1
博文 9
码字总数 1085
作品 0
闵行
高级程序员
私信 提问

暂无文章

Mariadb二进制包安装,Apache安装

安装mariadb 下载二进制包并解压 [root@test-a src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.t......

野雪球
今天
3
0
ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
4
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
7
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部