博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-原型模式
阅读量:5889 次
发布时间:2019-06-19

本文共 1406 字,大约阅读时间需要 4 分钟。

hot3.png

原型模式介绍

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

类图

原型模式

优点

  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
list = new ArrayList<>(); @Override public Thing clone(){ try { Thing thing = (Thing)super.clone(); thing.list = (ArrayList
)this.list.clone(); return thing; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; }}

转载于:https://my.oschina.net/song316/blog/732072

你可能感兴趣的文章
批处理学习笔记8 - 深入学习For命令1
查看>>
Object-c学习之路二(oc内存管理黄金法则1)
查看>>
python开发_python文件操作
查看>>
iPhone 已停用
查看>>
CSS3之边框图片border-image
查看>>
zedboard--基于zedboard的demo系统的boa服务器搭建(二十一)
查看>>
图片轮换cycle插件的运用
查看>>
【Oracle】两个表Join关联更新
查看>>
ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN
查看>>
关于IE下AJAX的问题探讨
查看>>
Eclipse console文本换行
查看>>
微信支付开发(11) Native支付
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
【设计模式】—— 代理模式Proxy
查看>>
如何优化,让电脑真正快起来(转)
查看>>
c# 数据集调试工具插件
查看>>
PostgreSQL服务端监听设置及client连接方法
查看>>
iText中输出中文
查看>>
POJ 2828 Buy Tickets(排队问题,线段树应用)
查看>>
拷贝带引用计数的对象时要注意的问题
查看>>