建造者模式

定义

用于简化复杂对象的创建

JDK中的建造者模式

java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身。

  public StringBuilder append(String str) {super.append(str);return this;}
//父类AbstractStringBuilder public AbstractStringBuilder append(String str) {if (str == null)return appendNull();int len = str.length();ensureCapacityInternal(count + len);str.getChars(0, len, value, count);count += len;return this;}

建造者模式和工厂模式的区别

建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。
所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。
因此,是选择工厂模式还是建造者模式,依实际情况而定。


原型模式

定义

原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,
对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。
在Java中,复制对象是通过clone()实现的,先创建一个原型类:

   class Prototpye1 implements Cloneable{public Object clone() throws CloneNotSupportedException{Prototpye proto=(Prototpye)super.clone();return proto;}//浅复制//因为此处的重点是super.clone()这句话,super.clone()调用的是Object的clone()方法,而在Object类中,clone()是native的
}

深复制和浅复制

浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。`

   class SerializableObject implements Serializable{private static final long serialVersionUID=1l; {}
}
public class Prototpye implements Cloneable,Serializable{private static  final long  serialVersionUID=1L;private String string;private SerializableObject obj;//浅复制.利用Object的clone()方法public Object   clone()throws CloneNotSupportedException {Prototpye proto=(Prototpye)super.clone();return proto;       }//要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。public Object deepClone()throws IOException ,ClassNotFoundException{ByteArrayOutputStream bos=new ByteArrayOutputStream();ObjectOutputStream oos=new ObjectOutputStream(bos);oos.writeObject(this);ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois=new ObjectInputStream(bis);return ois.readObject();}public String getString() {return string;}public void setString(String str) {this.string=str;}public SerializableObject getObj() {return obj;}
}

转载于:https://www.cnblogs.com/lknny/p/4853581.html

建造者模式与原型模式/builder模式与prototype模式/创建型模式相关推荐

  1. Builder(生成器)--对象创建型模式

    Builder(生成器)–对象创建型模式 一.意图 将一个复杂的对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 二.动机 1.在软件系统中,有时候面临着"一个复杂对象&quo ...

  2. 设计模式之创建型模式(工厂、原型、建造者)

    文章目录 创建型模式 2.1 工厂设计模式 2.1.1 简单工厂模式 2.1.2 工厂方法模式 2.1.3 抽象工厂 2.1.4 工厂模式总结 2.1.5 Spring中的工厂模式 2.1.6 工作中 ...

  3. 【设计模式】三大类:创建型模式、结构型模式、行为型模式

    1 创建型模式 本人理解:以C++为例,创建对象时,用关键字new来创建(实例化)对象.用一个函数或类将new的过程封装起来,就是创建型模式. <设计模式>中的描述: 创建型模式抽象了实例 ...

  4. java创建型_Java创建型模式

    Java创建型模式 在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象.基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度.创建型模式通过以某种方式控制 ...

  5. 软件设计与体系结构——创建型模式

    如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间 创建型模式: 创建型模式抽象了实例化过程 帮助系统独立于如何创建.组合和表示对象 一个类创建型模式使用继承改变被实例化的类 类创建型 ...

  6. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  7. 创建型模式——抽象工厂模式

    一. 实验目的与要求 1.练习使用工厂模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 手机CPU生产工厂:在 ...

  8. 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式

    文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑   在面向对 ...

  9. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  10. 《设计模式详解》创建型模式 - 建造者模式

    建造者模式 4.4 建造者模式 4.4.1 概述 4.4.2 结构 4.4.3 实例 4.4.4 优缺点 4.4.5 使用场景 4.4.6 扩展 - 构建对象 重构前 重构后 4.5 创建型模式对比 ...

最新文章

  1. c++ ofstream使用方法
  2. mysql embed_html中object和embed标签的区别
  3. 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料???
  4. SAP UI5 Opportunity popup
  5. python人工智能_人工智能福利丨Python核心语法实战
  6. 2010.11.13信息系统项目管理师考试下午试题答题思路剖析
  7. 实现Ajax异步交互
  8. 恢复误删的Windows文件
  9. const C++ 用法总结
  10. Windows8中离线安装.Net 3.5的方法
  11. 【bzoj4653】[Noi2016]区间 双指针法+线段树
  12. MySQL数据表查询操作
  13. rust go对比选择
  14. 巴斯勒相机的相机控制类析构函数多次调用的问题
  15. 从零开始的LC刷题(56): Power of Two
  16. ftp客户端安装,六款可以安装的ftp客户端
  17. 文件操作——getc()和putc()函数
  18. 【阿里云总监课】存储系统设计——NVMe SSD性能影响因素一探究竟
  19. SAP 发票凭证反向冲销
  20. 百家号素材审核规范说明

热门文章

  1. 转Python 参数知识(变量前加星号的意义)
  2. php中区分大小写的超全局变量总结
  3. 自己动手制作笔记本SP2系统安装光盘
  4. Gnu/Linux 链接XServer方法
  5. 基础语法(IDE:PyCharm)
  6. 程序员们请收好这本JVM日历:Java 2018大事回顾
  7. MySQL8与PG10:新版本下的较量谁更胜一筹?
  8. 欢庆1024之:程序猿不是你想黑,想黑就能黑!
  9. handler消息机制
  10. Lua 函数、闭包、尾调用总结