小滴课堂-学习笔记:(5)创建型设计模式 建造者+原型模式的应用场景

小滴课堂工业级paas云平台+springcloudAlibaba+JDK11综合项目实战 二当家小D 讲师: xdclass6 1024电商平台系统实战架构设计和实现需求分析 第1集 1024电商平台业务背景介绍和简历项目编写建议 简介:讲解电商营销中心的业务背景和简历项目编写建议 大课业务背景 实际上这个大课项目,是我在海外业务线的一个拉新营销平台的基础模型,印度印尼市场,俗称双印,可以说是V1版本,整个过程0~1也是非常艰辛,流量峰值差异大(夜间、节日等)、产品变动、薅羊毛攻击、各种国家政策等,目前由于印度阿三那边冲突XXX,在20年下半年暂时下线了。 ​ 大家编写简历 阅读详情

logo 愿景:"让编程不再难学,让技术与生活更加有趣"


更多架构课程请访问 xdclass.net

目录

第1集 创建型设计模式-Prototype原型设计模式实战《上》

第2集 创建型设计模式-Prototype原型设计模式实战《下》

第3集 创建型设计模式-建造者模式应用介绍《上》

第4集 创建型设计模式-建造者模式应用介绍《下》

干货文档


 

 

第1集 创建型设计模式-Prototype原型设计模式实战《上》

简介:讲解原型设计模式介绍和应用场景《上》

  • 原型设计模式Prototype

    • 是一种对象创建型模式,使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,主要用于创建重复的对象,同时又能保证性能
    • 工作原理是将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程
    • 应该是最简单的设计模式了,实现一个接口,重写一个方法即完成了原型模式

 

  • 核心组成

    • Prototype: 声明克隆方法的接口,是所有具体原型类的公共父类,Cloneable接口
    • ConcretePrototype : 具体原型类
    • Client: 让一个原型对象克隆自身从而创建一个新的对象

 

  • 应用场景

    • 创建新对象成本较大,新的对象可以通过原型模式对已有对象进行复制来获得
    • 如果系统要保存对象的状态,做备份使用

 

 

 

 

 

 

 

 

 

第2集 创建型设计模式-Prototype原型设计模式实战《下》

简介:讲解原型设计模式介绍和应用场景《下》

  • 遗留问题:

    • 通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的

    • 浅拷贝实现 Cloneable,深拷贝是通过实现 Serializable 读取二进制流

    • 拓展

      • 浅拷贝
      
      
      
      如果原型对象的成员变量是基本数据类型(int、double、byte、boolean、char等),将复制一份给克隆对象;
      如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址
      ​
      通过覆盖Object类的clone()方法可以实现浅克隆
      • 深拷贝
       

       

       
      无论原型对象的成员变量是基本数据类型还是引用类型,都将复制一份给克隆对象,如果需要实现深克隆,可以通过序列化(Serializable)等方式来实现
      • 原型模式是内存二进制流的拷贝,比new对象性能高很多,使用的时候记得注意是选择浅拷贝还是深拷贝
  • 优点

    • 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,可以提高新实例的创建效率
    • 可辅助实现撤销操作,使用深克隆的方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用恢复到历史状态

 

  • 缺点

    • 需要为每一个类配备一个克隆方法,对已有的类进行改造时,需要修改源代码,违背了“开闭原则”
    • 在实现深克隆时需要编写较为复杂的代码,且当对象之间存在多重的嵌套引用时,需要对每一层对象对应的类都必须支持深克隆
 


public class Person implements Cloneable, Serializable {
​
    private String name;
​
    private int age;
​
    private List<String> list = new ArrayList<>();
​
​
    public List<String> getList() {
        return list;
    }
​
    public void setList(List<String> list) {
        this.list = list;
    }
​
    public Person() {
        System.out.println("构造函数调用");
    }
​
    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;
    }
​
    @Override
    protected Person clone() throws CloneNotSupportedException {
        return (Person) super.clone();
    }
​
    /**
     * 深拷贝
     * @return
     */
    public Object deepClone() {
​
        try {
            //输出 序列化
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(this);
​
            //输入 反序列化
            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            Person copyObj = (Person) ois.readObject();
​
            return copyObj;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
​
}








 

第3集 创建型设计模式-建造者模式应用介绍《上》

简介:讲解建造者模式介绍和应用场景《上》

  • 建造者模式(Builder Pattern)

    • 使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    • 允许用户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节

       

  • 场景举例

    • KFC创建套餐:套餐是一个复杂对象,它一般包含主食如汉堡、烤翅等和饮料 如果汁、 可乐等组成部分,不同的套餐有不同的组合,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐

    timg

    • 电脑有低配、高配,组装需要CPU、内存、电源、硬盘、主板等

      image-20200927120601344

  • 核心组成

    • Builder:抽象建造者,定义多个通用方法和构建方法
    • ConcreteBuilder:具体建造者,可以有多个
    • Director:指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象
    • Product:产品角色

 

 

 

 

 

 

 

 

 

 

第4集 创建型设计模式-建造者模式应用介绍《下》

简介:讲解建造者模式介绍和应用场景《下》

  • 编码实践(同个设计模式 包括博文、书籍等不会完全相同,大体思想一致就行)



/**
 * 声明了建造者的公共方法
 */
public interface Builder {
​
    /**
     *细节方法
     */
    void buildCpu();
​
    void buildMainboard();
​
    void buildDisk();
​
    void buildPower();
​
    void buildMemory();
​
    Computer createComputer();
​
}
​
​
/**
 * 小滴课堂,愿景:让技术不再难学
 *
 * @Description 将产品和创建过程进行解耦,使用相同的创建过程创建不同的产品,控制产品生产过程
 *               Director是全程指导组装过程,具体的细节还是builder去操作
 * @Author 二当家小D
 * @Remark 有问题直接联系我,源码-笔记-技术交流群 微信:  xdclass6
 * @Version 1.0
 **/
​
public class Director {
​
    public Computer craete(Builder builder){
​
        builder.buildMemory();
        builder.buildCpu();
        builder.buildMainboard();
        builder.buildDisk();
        builder.buildPower();
​
        return builder.createComputer();
​
    }
​
}
​
​
​
​
public class HighComputerBuilder implements Builder{
​
    private Computer computer = new Computer();
​
    @Override
    public void buildCpu() {
        computer.setCpu("高配 CPU");
    }
​
    @Override
    public void buildMainboard() {
        computer.setMainboard("高配 主板");
    }
​
    @Override
    public void buildDisk() {
        computer.setDisk("高配 磁盘");
    }
​
    @Override
    public void buildPower() {
        computer.setPower("高配 电源");
    }
​
    @Override
    public void buildMemory() {
        computer.setMemory("高配 内存");
    }
​
    @Override
    public Computer createComputer() {
        return computer;
    }
}
​

 

  • 优点

    • 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦
    • 每一个具体建造者都相对独立,而与其他的具体建造者无关,更加精细地控制产品的创建过程
    • 增加新的具体建造者无须修改原有类库的代码,符合开闭原则
    • 建造者模式结合链式编程来使用,代码上更加美观
  • 缺点

    • 建造者模式所创建的产品一般具有较多的共同点,如果产品差异大则不建议使用

     

  • JDK里面的应用

    • tcp传输协议 protobuf 生成的api、java中的StringBuilder(不完全一样,思想一样)

     

  • 建造者模式与抽象工厂模式的比较:

    • 建造者模式返回一个组装好的完整产品 , 抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族

 

 

干货文档

angular中访问本地json文件 先在assets文件夹下写一个json文件,这样在打完包之后也可以手动修改json文件内容 1、在需要访问本地json文件的ts文件里面引入 import{HttpClient}from'@angular/common/http'; 2、用ajax请求调用,我这里是用已经封装好的ajax请求调用 gethttp = ()=>{ var self = this self.ajax.getAjax("../../assets/server.json","g... 阅读详情

相关推荐

RS485差分信号A下拉B上拉导致的乱码问题:一个硬件工程师的踩坑实录

本文通过一个工业网关项目中的RS485通信乱码故障,深入剖析了差分信号偏置电路设计的核心要点。文章详细记录了从波形抓取、原理图分析到多节点冲突排查的全过程,重点揭示了A下拉、B上拉这一反常规配置如何导致总线空闲状态不稳定,进而引发数据包末尾多出0x00字节及前导乱码的问题,并最终给出了硬件与软件协同的系统级解决方案与设计准则。

weixin_29159441的博客 236

工厂模式:像工厂一样创建对象,让业务代码更专注!

定义一个用于创建产品的接口,由子类决定生产什么产品。

306

微机原理课程设计-模拟十字路口交通信号灯

一、设计任务描述 1.1设计目的 通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。 1.2 设计要求 控制LED灯,按照十字路口红绿灯的原理亮灭显示: (1) 东西方向车辆放行x秒...

Learning_is_endless的博客 2万+

小滴课堂 - 第十一章:设计模式在框架和源码里面的应用和准备

愿景:"让编程不再难学,让技术与生活更加有趣" 更多架构课程请访问 xdclass.net 第1集 设计模式在框架和源码里面的应用和准备 简介:介绍设计模式的在jdk源码的应用和Spring源码准备 前面在jdk源码里面有讲多个设计模式,大家回想下 迭代器设计模式:Iterator类 装饰器模式:BufferedInputStream类 单例设计模式JDK中Runtime类 建造者模式 StringBuilder类 适配.

dev666的博客 318

基于WebGL架构的3D可视化平台—平面图导航(一)

前言 利用CampusBuilder来搭建自己的虚拟世界过程有这样一个问题:如何快速聚焦到虚拟场景的某一位置。当然我们可以创建几个按钮对应查找我们需要去的位置(参照物)并聚焦,但是按钮并不是很炫酷也不能很好的反馈给我们一些信息。接下来我们就用平面导航图来解决这一问题。 第一步:使用CampusBuilder搭建模拟场景,CampusBuilder操作简单,分分钟就可以上手。 ...

nioooom的博客 4162

【智能优化算法】2024年SCI鳗鱼-石斑鱼优化算法(EGO),含MathType公式、word伪代码、visio流程图、matlab代码等。

该文中包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。 鳗鱼-石斑鱼优化算法(Eel and grouper optimizer ,EGO)是一种新型的元启发式算法(智能优化算法),灵感来源于海洋生态系统中鳗鱼和石斑鱼的共生作用和觅食策略。该成果由Ali Mohammadzadeh和Seyedali Mirjalili两位作者于2024年6月发表在SCI著名期刊《Cluster Computing》上。

2301_79359347的博客 1041

设计模式应试复习篇(一)——举例说明6种创建型模式的适用情景

系列说明:这个系列是为了设计模式考试做的复习总结,因为感觉书上内容很多很抽象,所以想用自己的语言结合例子希望能说的容易理解些,但是自己理解难免会有偏差的地方,这个系列也更多的是为了应试,所以欢迎纠错啦~~ 本篇说明:本篇会用自己的语言说明6种创建型模式的适用场景,能够先对每个模式是做什么的有一个总体的把握 1、简单工厂模式 首先既然叫简单工厂,那么模式中就只有一个工厂。这个工厂可以生产很多东...

Hedy的博客 995

从“能跑”到“好用”:一名 Python 开发者的工程化进阶之路【Python心得篇】

Python 早已不只是写脚本、跑数据的工具。后端服务AI Agent 编排层自动化平台核心语言数据与业务之间的“中枢层”区别只在于:你是用脚本方式,还是工程方式在写。如果你已经能写“能跑的 Python”,下一步,就是让它长期可跑、稳定可演进。Python 的真正价值不在于“写得快”,而在于能否支撑持续演进的工程实践。当代码从一次性脚本走向长期运行的系统,开发者必须从结构设计、职责拆分、性能意识和类型约束等方面进行系统性思考。

博客 1546

c++ 工厂模式

#include &lt;iostream&gt; using namespace std; class LeiFeng { public: virtual void Sweep() { cout&lt;&lt;"扫地"&lt;&lt;endl; } virtual void Wash() { ...

u012338130的专栏 189

Qt Creator牵手DeepSeek,开启AI开发新征程

Qt Creator 是一款功能强大的跨平台集成开发环境(IDE),专为 Qt 应用程序开发量身定制。它支持在编程过程中使用 GitHub Copilot 等编码助手,能帮助开发者为桌面、移动端和嵌入式平台创建软件。在代码编辑方面,Qt Creator 具备代码补全、语法突出显示、重构等功能,内置文档也随手可得,极大提高了代码编写的效率和准确性。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 7185

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 178

简单工厂模式

简单工厂模式学习                  工厂模式(Factory Pattern)又被称为静态工厂方法模式,主要实现是有工厂类,产品抽象类以及具体产品类组成。其中工厂类的主要作用在于针对不同的 产品生产在抽象类引用下的具体产品的实例。例如生产不同的形状时,有抽象类Shape,具体产品类Rectangle、Circle、Triangle等,以及实例化各个具体产品并向外提供引用的工厂类。...

u011750755的博客 238

零基础速成simulink代码生成——stateflow基础3

此专栏面向嵌入式工程没有matlab开发经验的人,可以快速学习和实践这门技术。MDB技术,越来越成熟和普遍,从手写代码转到基于模型开发已经是大势,不仅减少开发周期,还增加代码的复用性。汽车领域、医疗和算法建模广泛使用。

不断debug,优化中…… 1711

浅谈Java23种设计模式之创建型设计模式的几种使用场景

5种创建型设计模式的具体实际使用场景解读

TaoShao521的博客 884

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

工厂模式(创建对象的最佳方式)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录概述一、模式原理1.1 UML类图1.2 使用场景 概述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式具体包括了简单工厂、工厂方法、抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型 一、模式原

weixin_43707759的博客 9842

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

趣谈设计模式 | 工厂模式(Factory):利用工厂来创建对象

文章目录案例:外设店铺简单工厂工厂方法抽象工厂总结要点三类工厂模式的特点三种工厂模式的适用场景完整代码与文档 工厂模式模式是创建型模式中较为常用的一个,它并不是一个模式,而是三种功能相近的设计模式的统称,它们分别是简单工厂模式、工厂方法模式、抽象工厂模式,下面我将结合案例来一一讲解它们的特点 案例:外设店铺 假设我们经营着一家外设店铺,我们主要售卖雷蛇和罗技这两个型号的鼠标,为了方便用户购买,我们设计了一个网上购物的平台,用户在网上下单后我们会去根据需求来生成鼠标,再经过测试、包装、注册信息后,就将合格的

凌桓丶的博客 1583

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式之创建型模式

创建型模式 单例模式 单例模式就是采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 ​ 单例模式共有八种方式: ​ 饿汉式两种: 饿汉式之静态常量 实现步骤: 构造器私有化(防止 new) 类的内部创建对象 向外暴露一个静态的公共方法(getInstance) 代码实现 //饿汉式(静态变量) class Singleton { //构造器私有化(防止 new) private Singleto

小熊的博客 277

工厂模式--由对象工厂生成对象

工厂模式介绍 工厂模式的定义 先看一下GOF对工厂模式的定义: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.”(在基类中定...

weixin_42015465的博客 722

深入理解工厂模式

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 历史回顾: 深入理解单例模式 历史文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 [T...

weixin_34248849的博客 480

java为什么用工厂模式_为什么用简单工厂模式,而不是直接实例化对象

一开始了解了"简单工厂模式"之后,在关于为什么不直接实例对象,而是利用工厂类来实例对象产生了疑惑。经过多种渠道的了解,我最后的观点是:这个工厂类不仅仅就只能有实例化对象这一个功能。举例来说,如果我要在实例化这个对象之前先读取某些配置,做各种各样的预备工作呢?比如下面的代码:客户端类:public classConsoleUser {public static voidmain(String[] a...

weixin_42511887的博客 514

只能生成一个对象的类(经典设计模式之一)

#include              //   singleton      class   A      {                      public:                                      static   A*   GetInstance(void)                                     

wlcgangcunningci的专栏 640

小滴课堂-学习笔记:小滴课堂面试专题介绍+简历分析+投递

愿景:"让编程不再难学,让技术与生活更加有趣" 更多架构课程请访问 xdclass.net 目录 第1集 小滴课堂面试专题课程介绍+适合人员+学后水平 第2集 小滴课堂面试专题第一季大纲速览,你知道多少 第3集 互联网公司校/社招的招聘要求解读 第4集 学历/部分招聘条件不符合? 互联网公司简历投递技巧 第5集 BAT大厂社招、校招、内推常见的面试形式有多少 第6集 拿到面试通知,怎样应对互联网公司的多轮面试 第7集 社招+校招被技术面试完虐系列之多方位考查点 干货文档 第1集 小滴.

dev666的博客 2399

设计模式创建型模式应用场景

创建型模式常用的是factory、builder和prototype,用于抽象和简化 singleton模式用于管理有限资源(有限资源常常需要解决并发问题,实现时需要注意)

17studio 500

小滴课堂-学习笔记:(7)你知道结构型设计模式装饰器+代理模式 ?留下来聊聊

愿景:"让编程不再难学,让技术与生活更加有趣" 更多架构课程请访问 xdclass.net 目录 第1集 如虎添翼的设计模式-装饰器设计模式介绍 第2集 满足老王的改装搭配-玩转装饰器设计模式案例实战 第3集 JDK源码里面的Stream IO流-装饰器设计模式应用 第4集 加盟商来啦-你需要掌握的代理设计模式《上》 第5集 加盟商来啦-你需要掌握的代理设计模式《下》 第6集 大量使用第三方SDK-它们常用的外观设计模式你知道多少? 第7集 案例实战-外观设计模式在多渠道消息推送里..

dev666的博客 593

二、由对象工厂生成对象的设计模式:工厂模式

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。 ...

神言如殇的博客 237

Java日常开发会遇到的坑(转载)

转载自:https://mp.weixin.qq.com/s/FY5rlDjxcCNqnCJbnULwSA 1. 六类典型空指针问题 包装类型的空指针问题 级联调用的空指针问题 Equals方法左边的空指针问题 ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null。 集合,数组直接获取元素 对象直接获取属性 1.1包装类型的空指针问题 public class NullPointTest { public static void main(String[]

ZERO 677
上一篇: 小滴课堂-学习笔记:(6)不知道结构型设计模式?面试官会说 出门右转
下一篇: 小滴课堂-学习笔记:(4)创建型设计模式-工厂模式和应用
dev666
博客等级 码龄9年 100粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dev666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值