文档章节

设计模式-原型模式

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;
    }
}

© 著作权归作者所有

共有 人打赏支持
song316
粉丝 1
博文 9
码字总数 1085
作品 0
闵行
高级程序员

暂无文章

Future,Thread,Callable,Executors.newXXXThreadPool

package cunrent.future;import java.util.concurrent.*;public class FutureCook { public static void main(String[] args) throws InterruptedException, ExecutionExcept......

noteman
15分钟前
1
0
shing boot 做session共享 redis

因为多台服务器负载均衡,在获取客户端的sessionId的时候,会出现第一次和第二次不一样,因为负载均衡的缘故,你的服务器最少两台,那么客户端连接第一次请求和第二次请求如果不是同一台服务...

小马_wolf
19分钟前
0
0
【Springboot+mybatis】 解析Excel并批量导入到数据库

【Springboot+mybatis】 解析Excel并批量导入到数据库置顶 2018年01月16日 20:05:52 冉野丶 阅读数:4060 标签: excel导入数据库 文件上传 excel解析 更多个人分类: POI 工作问题归纳...

奥特曼之王
21分钟前
1
0
Mac OS下安装Axure RP 8.0.0.3312 中文破解版

Mac下一款快速原型设计工具——Axure RP,有了它可以大大提高你的工作效率。此次带来的是Axure RP 8.0.0.3312 版本。 介绍 Axure RP 能帮助网站需求设计者,快捷而简便的创建基于网站构架图的...

james_laughing
23分钟前
0
0
【Guava】使用Guava的RateLimiter做限流

一、常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法。 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。可以看出...

大海201506
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部