原型模式

  原型模式也称克隆模式。原型模式jian ming zhi yi,就是先创造出一个原型,然后通过类似于Java中的clone方法,对对象的拷贝,克隆类似于new,但是不同于new。new创造出来的对象采用的是默认值。克隆出来的对象与原型对象相同,同时不会影响原型对象,然后在修改克隆出来的对象。

实现

  继承Cloneable接口,重写clone方法。(此处的clone方法不是接口Cloneable中的抽象方法,而是obj中的方法)

应用场景

  例:js中继承就是prototype就是采用原型模式。创建一个对象比较耗时时,采用原型模式。

Demo

  

public class Sheep implements Cloneable{
  private String name;
  private Date brithday;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Date getBrithday() {
    return brithday;
  }
  public void setBrithday(Date brithday) {
    this.brithday = brithday;
  }
  public Sheep() {
  }

  public Sheep(String name, Date brithday) {
    super();
    this.name = name;
    this.brithday = brithday;
  }

  @Override
  public String toString() {
    return "Sheep [name=" + name + ", brithday=" + brithday + "]";
  }
  @Override
  protected Object clone() throws CloneNotSupportedException {

  //此处的克隆只是简单的clone,原型模式中的对象中属性所引用的对象一旦修改,clone出来的对象的值也会随之改变,此处为浅复制
    Object obj = super.clone();
    return obj;
  }
}

public class Client {

  public static void main(String[] args) throws CloneNotSupportedException {
    Sheep s1 = new Sheep("多里",new Date());
    System.out.println(s1);
    Sheep s2 = (Sheep) s1.clone();
    System.out.println(s2);
  }
}

  @Override
  protected Object clone() throws CloneNotSupportedException {

//在复制的时候,同时对属性进行复制,通过此方式来进行深复制。
    Object obj = super.clone();
    Sheep s = (Sheep)obj;
    s.brithday = (Date) this.brithday.clone();
    return obj;
  }

Java原型模式的更多相关文章

  1. Java原型模式之基础

    一.是什么? 定义:用原型实例指定创建对象的种类,而且通过拷贝这些原型创建新的对象.(官方定义) 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype. Prototype类须要 ...

  2. Java 原型模式(克隆模式)

      Java 的设计模式有 23 种,前段时间小编已经介绍了单例模式,由于我们在学习 Spring 的时候在 bean 标签的学习中碰到了今天要讲的原型模式,那么小编就已本文来介绍下原型模式. 原型模 ...

  3. Java原型模式之浅拷贝-深拷贝

    一.是什么? 浅拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量仅仅复制引用,不复制引用的对象 深拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制 内部机制: ...

  4. Java 原型模式

    http://www.cnblogs.com/itTeacher/archive/2012/12/02/2797857.html http://www.cnblogs.com/java-my-life ...

  5. 重学 Java 设计模式:实战原型模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 老板你加钱我的代码能飞 程序员这份工作里有两种人:一类是热爱喜欢的.一类是仅当成工作 ...

  6. 【设计模式】Java设计模式精讲之原型模式

    简单记录 - 慕课网 Java设计模式精讲 Debug方式+内存分析 & 设计模式之禅-秦小波 文章目录 1.原型模式的定义 原型-定义 原型-类型 2.原型模式的实现 原型模式的通用类图 原 ...

  7. 设计模式总结篇系列:原型模式(Prototype)

    首先对原型模式进行一个简单概念说明:通过一个已经存在的对象,复制出更多的具有与此对象具有相同类型的新的对象. 在理解Java原型模式之前,首先需要理解Java中的一个概念:复制/克隆. 在博文< ...

  8. java设计模式之原型模式

    原型模式概念 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.java中复制通过clone()实现的.clone中涉及深.浅复制.深.浅复制的概念如下: ⑴浅复制 ...

  9. Java设计模式5:原型模式

    原型模式 原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意. 原型模式结构 原型模式要求对象实现一个 ...

随机推荐

  1. [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)

    星期日, 09. 九月 2018 07:51下午 - beautifulzzzz 1.安装步骤 1) 从GNU Arm Embedded Toolchain官网下载最新的gcc-arm工具链,写文章时 ...

  2. 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准

    一.H264 概述 H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 1. H.264视频编解码的意义 H.264的出现就是为了创 ...

  3. JNI实战(一):JNI HelloWorld

    使用最新Android Studio的Cmake,创建一个Native C++项目后,我们就可以看到JNI的Hello World的项目及示例代码了. JNI的项目代码,分为三层:Java层,C++层 ...

  4. [BASH]获取执行脚本的路径

    SCRIPT=$(readlink -f "$0") #当前执行脚本的真实路径,兼容软链接 basedir=$(dirname "$SCRIPT") #当前执行 ...

  5. iOS学习——浅谈RunLoop

    RunLoop的字面意思是运行循环.跑圈,一个App启动后能一直执行,就是因为启动后进入了一个循环,在这个循环中不断监听各种状态.手势动作,并做出相应的响应.这个循环就是我们今天要探究的RunLoop ...

  6. 安装ubuntu18.10并连接xshell6

    emmmm万万没想到上一篇装的linux内核才3.10,装个ubuntu系统来继续自己的docker学习之旅. 话不多说,先下镜像,地址:http://mirrors.melbourne.co.uk/ ...

  7. eclipse项目有红叉的解决办法

    eclipse项目上有红叉,说明这个项目存在一些的问题,对于这种情况需要具体来看. 1 新导入项目的红叉 如果是新导入的项目,一般红叉就只在项目名称上面有红叉,项目下的分项上面没有,这一般是由于当初项 ...

  8. CentOS6.5中部署java web环境

    原来在linux中部署java web环境,没有做好总结,这次在部署的过程中,将部署的过程做了记录,希望对大家有帮助.主要内容包括CentOS安装以后的网络设置,系统自带jdk的卸载,新版本jdk的安 ...

  9. Docker系列教程01-Centos7安装新版Docker教程(10步)

    最近一直忙于开发,没有时间好好总结一下docker的知识.其实现在docker的教程已经很多很多了,但是很多系统的教程都是基于Ubuntu系统,因为官方推荐使用Ubuntu系统啊,原因在于Ubuntu ...

  10. Python内置函数(45)——object

    英文文档: class objectReturn a new featureless object. object is a base for all classes. It has the meth ...