用于创建重复的对象,同时又能保证性能。通俗的讲,原型模式就是克隆对象,直接copy字节码,不走构造方法,性能非常高。ORM中经常用到。

注意

只支持9种数据类型的深拷贝: 8大基本类型(int long float double boolean char short byte )+String 其他(List等)数据类型默认都是浅拷贝,但是我们也能通过他们自身的clone方法来深拷贝。

        List list = new ArrayList();List cloneList = (List) ((ArrayList) list).clone();
复制代码
Prototype.java

实现Cloneable接口,并且重写clone()方法。

public class Prototype implements Cloneable{@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
复制代码

:如果不实现该接口而直接调用clone()方法会抛出CloneNotSupportedException异常

PeoplePrototype.java

人原型,用来做被拷贝的对象。

public class PeoplePrototype extends Prototype{private int age;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
复制代码
Main.java
public class Main {public static void main(String[] args) {PeoplePrototype prototype = new PeoplePrototype();prototype.setAge(20);prototype.setName("FantJ");try {PeoplePrototype clone = (PeoplePrototype)prototype.clone();System.out.println(clone.getAge());System.out.println(clone == prototype);System.out.println(clone+"    "+prototype);System.out.println(clone.getClass()  +"     "+ prototype.getClass());} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}
复制代码

控制台打印:

20
false
com.fantj.prototype.ConcretePrototype@6d6f6e28    com.fantj.prototype.ConcretePrototype@135fbaa4
class com.fantj.prototype.ConcretePrototype     class com.fantj.prototype.ConcretePrototype
复制代码

设计模式快速学习(五)原型模式相关推荐

  1. 《精通Python设计模式》学习之原型模式

    暂时在工作中,还没有用到呢~~~ 以后要留意一下,主要用于复制对象副本, 然后又有自定义属性的地方. import copy from collections import OrderedDictcl ...

  2. Java设计模式快速入门之外观模式

    3.2Java设计模式快速入门之外观模式 3.2.1概念 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向 ...

  3. 设计模式(四)——原型模式详解

    设计模式(四)--原型模式详解 定义 结构 实现 案例 浅克隆 深克隆 定义 原型模式就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的对象. 结构 原型模式包含以下角色: ...

  4. 设计模式学习笔记-原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...

  5. 设计模式五: 原型模式(Prototype)

    简介 原型模式是属于创建型模式的一种,是通过拷贝原型对象来创建新的对象. 万能的Java超类Object提供了clone()方法来实现对象的拷贝. 可以在以下场景中使用原型模式: 构造函数创建对象成本 ...

  6. 设计模式(六)原型模式

    一.原型模式的作用? 1.基本就是你需要从A的实例得到一份与A内容相同,但是又互不干扰的实例的话,就需要使用原型模式. 2.用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.这个其实和C ...

  7. 大战设计模式【23】—— 原型模式

    原型模式(Prototype) 设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample 一.定义 使用原型实例指定创建对象的种 ...

  8. C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】

    一.引言 今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模式& ...

  9. 设计模式【5】-- 原型模式

    开局一张图,剩下全靠写- 设计模式文章集合:http://aphysia.cn/categories/designpattern 前言 接触过 Spring 或者 Springboot 的同学或许都了 ...

最新文章

  1. Netty3 源代码分析 - NIO server绑定过程分析
  2. C++对象模型学习——站在对象模型的尖端
  3. 谷歌也被逼出局域网了 baidu从此天下无敌
  4. 用python庆祝生日_生日到底该过阴历还是阳历好呢?不是迷信,都怪我们大意!...
  5. 锁屏面试题百日百刷-VUE篇(一)
  6. 抽象类java启动线程_java 线程复习笔记
  7. 音视频之——FFmpeg教程(二)——Windows10下搭建nginx-rtmp流媒体服务器
  8. hiho #1014 : Trie树(模板)
  9. 微软发布5月补丁星期二:3个0day,1个蠕虫
  10. springboot学习笔记-3 整合redismongodb
  11. mysql gridview_DateGridView控件与mysql交互
  12. 错误empty character constant的解决办法
  13. baidumap api MySQL_百度地图API获取数据
  14. 技术分享 | 如何在无人机设计中运用拓补优化技术?
  15. python 摄氏度和华氏度温度转换案例
  16. DIY单片机串口打印函数print
  17. This must be due to duplicate classes or playing wrongly with class loaders 1
  18. python-今日头条
  19. 第十三章:项目相关方管理 - (13.1 识别相关方)
  20. 【ubuntu】Ubuntu 各版本代号简介

热门文章

  1. Python基础学习笔记(一)python发展史与优缺点,岗位与薪资
  2. Pythone3 sys模块
  3. 【Python】模块学习之Timer定时任务,递归定时自调获取博客浏览量
  4. 卸载loadrunner
  5. 240多个jQuery插件 功能强大 齐全
  6. 使用 XML Schema 定义元素的基本知识--1
  7. vue 项目中遇到的问题及解决方案
  8. Mybatis-generator,自动生成文件.问题及解决
  9. 【干货】2021中国“企服企业”规模化获客体系建设指南.pdf(附下载链接)
  10. 【报告分享】2021年中国互联网保险消费者洞察报告.pdf(附下载链接)