Java设计模式---原型模式

  Java设计模式---原型模式

  辰兮要努力 2020-06-02 12:04:32 70 收藏 2 原力计划

  分类专栏: 设计模式

  文章标签: 数据库 java 设计模式 面试 经验分享

  版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

  本文链接:https://blog.csdn.net/weixin_45393094/article/details/106492207

  收起

  你好我是辰兮,很高兴你能来阅读,本篇给你介绍Java设计模式之原型模式,通过简单的案例给你讲解,分享给初学者,大家一起进步。

  1.JAVA基础面试常考问题 : JAVA面试基础常考题汇集

  2.JAVA面试SSM框架常考 :JAVA框架面试题汇集

  文章目录

  一、序言

  二、原型模式的定义与特点

  三、原型模式的结构与实现

  一、序言

  在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻⼀吹就变出很多孙悟空⼀样简单。

  二、原型模式的定义与特点

  原型(Prototype)模式的定义如下:

  用⼀个已经创建的实例作为原型,通过复制该原型对象来创建⼀个和原型相同或相似的新对象。

  在这⾥,原型实例指定了要创建的对象的种类。⽤这种⽅式创建对象⾮常⾼效,根本⽆须知道对象创建的细节。

  例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在⽣活中复制的例⼦⾮常多,这⾥不⼀⼀列举了。

  三、原型模式的结构与实现

  由于 Java 提供了对象的 clone() ⽅法,所以⽤ Java 实现原型模式很简单。

  1、模式的结构

  原型模式包含以下主要⻆⾊。

  抽象原型类:规定了具体原型对象必须实现的接⼝。

  具体原型类:实现抽象原型类的 clone() ⽅法,它是可被复制的对象。

  访问类:使⽤具体原型类中的 clone() ⽅法来复制新的对象。

  2、模式的实现

  原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() ⽅法,具体原型类只要实现 Cloneable 接⼝就可实现对象的浅克隆,这⾥的 Cloneable 接⼝就是抽象原型类。浅拷贝实现Cloneable,重写,深拷贝是通过实现Serializable读取二进制流。

  首先我们常见一个类继承Cloneable接口,然后重写里面的clone方法

  //具体原型类

  public class Realizetype implements Cloneable

  {

  Realizetype()

  {

  System.out.println("具体原型创建成功!");

  }

  public Object clone() throws CloneNotSupportedException

  {

  System.out.println("具体原型复制成功!");

  return (Realizetype)super.clone();

  }

  }

  测试类

  //原型模式的测试类

  public class PrototypeTest {

  public static void main(String[] args)throws CloneNotSupportedException {

  Realizetype obj1=new Realizetype();

  Realizetype obj2=(Realizetype)obj1.clone();

  System.out.println("obj1==obj2?"+(obj1==obj2));

  }

  }

  具体原型创建成功!

  具体原型复制成功!

  obj1==obj2?false

  实现克隆操作,继承Cloneable,重写clone()方法。

  原型模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有稳定的接口。

  3、原型模式的应用场景

  ①对象之间相同或相似,即只是个别的几个属性不同的时候。

  ②对象的创建过程比较麻烦,但复制比较简单的时候。

  public class Citation implements Cloneable {

  String name;

  String info;

  String college;

  public Citation(String name, String info, String college) {

  this.name = name;

  this.info = info;

  this.college = college;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public String getInfo() {

  return info;

  }

  public void setInfo(String info) {

  this.info = info;

  }

  public String getCollege() {

  return college;

  }

  public void setCollege(String college) {

  this.college = college;

  }

  void display()

  {

  System.out.println(name+info+college);

  }

  public Object clone() throws CloneNotSupportedException

  {

  System.out.println("奖状拷⻉成功!");

  return (Citation)super.clone();

  }

  }

  //原型模式的测试类

  public class PrototypeTest {

  public static void main(String[] args)throws CloneNotSupportedException {

  Citation obj1=new Citation("卢本伟","同学:在2020学年获得一等奖学金","武汉大学");

  obj1.display();

  Citation obj2=(Citation) obj1.clone();

  obj2.setName("PDD");

  obj2.display();

  }

  }

  卢本伟同学:在2020学年获得一等奖学金武汉大学

  奖状拷⻉成功!

  PDD同学:在2020学年获得一等奖学金武汉大学

  ①原型模式(Prototype Pattern)用于创建重复的对象,同时又能保证性能。

  ②它属于创建型设计模式,它提供了一种创建对象的最佳方法。

  ③这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。

  ④例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

  ————————————————

  版权声明:本文为CSDN博主「辰兮要努力」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

  原文链接:https://blog.csdn.net/weixin_45393094/article/details/106492207

沈阳男科医院哪个好:http://www.024sdjk.com/

posted @ 2020-06-03 10:32  温水木  阅读(191)  评论(0)    收藏  举报