创建型设计模式

02.创建型设计模式实验 写在前面 在网上抄个作业居然要不没有,要不要钱!老子有个屁的钱,气得我直接写完了,分享在这里供借鉴(抄可以,但你得会了再抄)。随便转载,可以不署我名但需要声明非原创。 这是一系列的作业,所以也气了我一系列,不想后来人受气了。 本作业对《图解设计模式》这本书有不小内容的借鉴,在此感谢并推荐。 创建型设计模式实验 1、简单工厂 题目:使用简单工厂模式设计一个可以创建不同几何形状( Shape)(例如圆形( Circle).、矩形 Rectangle)和三角形( ( Triangle)等的绘图工具类,每个几何图形 阅读详情
创建型设计模式

主要包括:单例模式、工厂模式、建造者模式、原型模式。

主要功能:解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。

1. 单例模式

定义:用来创建全局唯一的对象。一个类只能创建一个对象(实例),那这个类就是一个单例类,这种模式就叫单例模式。

实现方式:饿汉式、懒汉式、双重检测、静态内部类、枚举。

使用场景:如果单例类,没有后续扩展需求,并且并不依赖外部系统,那么设计成单例类是可以的。对于一些全局类,我们在其他地方 new 的话,还在类之间传来传去的,不如直接做成单例类,使用起来简洁方便。

缺点:

1. 单例对 OOP 特性支持的不是很好
2. 单例会隐藏类之间的依赖关系
3. 单例对代码的扩展性不好
4. 单例对代码的可测试性不好
5. 单例不支持有参数的构造函数

单例模式的替代方案:可以通过工厂模式、IOC容器来保证全局唯一。

此外,进程唯一单例、线程唯一单例、集群唯一单例、多例等扩展知识点,虽然实际开发用不到,但是可以锻炼逻辑思维,扩展思路。

2. 工厂模式

工厂模式包含简单工厂、工厂方法、抽象工厂这三种细分模式。其中简单工厂、工厂方法两种比较常用,抽象工厂的应用场景比较特殊,所以很少用到,不是我们学习的重点。

定义:用来创建不同但是相关类型的对象(继承统一父类或接口的一组子类(实现类)),由给定的参数来决定创建哪种类型的对象。实际上,如果创建对象的逻辑并不复杂,我们可以直接通过 new 来创建对象就可以了,不需要使用工厂模式。当创建逻辑比较复杂,是一个大工程的时候,我们就考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。

使用场景:当每个对象的创建逻辑比较简单的时候,推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。当每个对象的创建逻辑都比较复杂时,为了避免设计一个过于庞大的工厂类,推荐使用工厂方法模式,将创建逻辑拆的更细,每个对象的创建逻辑拆分到各自的工厂类中。

判断是否使用的标准

  1. 封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者更加透明。
  2. 代码复用:创建代码抽离到独立的工厂类之后,可以复用。
  3. 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。
  4. 控制复杂度:将创建代码抽离出来,让原本的函数或类职责更加单一,代码更加简单。

工厂模式经典的使用场景:依赖注入框架,比如Spring IOC、Google Guice,它用来集中创建、组装、管理对象,跟具体的业务代码解耦,让程序员集中在业务代码开发中。

3. 建造者模式

定义:建造者模式用来创建复杂对象,可以通过设置不同的可选参数,定制化地创建不同的对象。建造者模式的原理和实现比较简单,重点需要掌握使用场景,避免过度使用。

判断是否使用的标准

  1. 把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填属性有很多,把这些必填属性都放到构造函数中设置,那么构造函数就又会出现参数列表很长的问题。如果我们把必填属性通过 set() 方法设置,那校验这些必填属性是否填写的逻辑,就无处安放了。
  2. 如果类的属性之间有一定的依赖关系或者约束条件,继续使用构造函数配合 set() 方法的设计思路,那么依赖关系或约束条件的校验逻辑,就无处安放了。
  3. 希望创建不可变对象,也就是说,在对象创建好之后,不能再修改内部的属性值,要实现这个功能,我们就不能再类中暴露 set() 方法。构造函数配合 set() 方法来设置属性值的方式就不适用了。
4. 原型模式

定义:如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫做原型模式。

实现方式:原型模式的实现方法:深拷贝和浅拷贝。浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归的复制引用对象,以及引用对象的引用对象…而深拷贝得到的是一份完完全全独立的对象。所以,深拷贝比浅拷贝,更加耗时,更加耗内存空间。

使用场景:如果要拷贝的对象是不可变对象,浅拷贝共享不可变对象是没问题的,但是对可变对象来说,浅拷贝得到的对象和原始对象会共享部分数据,就有可能出现数据被修改的风险,也就变得复杂多了。在操作非常耗时的情况下,比较推荐使用浅拷贝,否则,没有充分的理由,不要为了一点点的性能提升而使用浅拷贝。

探索设计模式的魅力:创建型设计模式的比较与决策 本文深入探讨六种创建型设计模式:单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。通过概述各模式的核心概念、应用场景和关键要素,帮助读者理解并掌握这些模式的核心思想。文章还通过比较表和决策流程图,直观地展示了各模式之间的差异和选择依据,为读者提供了实用的设计模式选择指南。 本文的特色在于结合了理论与实践,每个模式都配有详细的代码示例和结构图,帮助读者更好地理解和应用这些模式。 总之,本文旨在为读者提供一篇全面、深入且实用的创建型设计模式指南,帮助读者在实际工作中灵活运用这些模式... 阅读详情

相关推荐

23种设计模式-创建型模式

工厂方法模式(Factory Method Pattern)是创建型设计模式的一种,它提供了一种创建对象的最佳方式。在工厂方法模式中,对象的创建是通过调用一个工厂方法而不是直接调用构造器来完成的。这个工厂方法可以是指定的接口并由子类实现,或者是类的抽象方法。定义工厂方法模式定义了一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。涉及到的关键类或接口Product(产品角色):定义工厂方法所创建的对象的接口。ConcreteProduct(具体产品角色)

编程小鹏的博客 1238

《设计模式》创建型模式总结

首先,要明确这里所说的设计模式重点聚焦系统级的设计,系统本质上是一组类实例的组合,它区别于单一的类或者接口的设计,需要一定的抽象才能够使得后续的编码工作更有效率。创建型模式的最主要作用就是抽象了系统的实例化过程。在没有这种抽象之前,系统的实例化只是单纯的被看作是N个类的实例化,不利于后续的编码执行。这种抽象在大体上有两个实现的原则。其一是将系统所需要用到的各种类信息给封装起来;其二是把这些类的创建和组合方式也给隐藏起来。总之,整个系统有一套抽象的接口负责统一和外部对接。

weixin_50353846的博客 1446

设计模式之创建型5种

设计模式之所以被归纳为23种,而非其他数量,源于GoF(Gang of Four)在1994年的系统性总结和分类。

Marzlam的博客 1063

设计模式创建型

最近在进行设计模式的学习,今天将创建型的设计模式总结在这里,区分不同的设计模式的用法和作用本文讲述了设计模式中5个创建型模式,并且给出了对应的代码示例。用好设计模式可以大大的提升我们的代码的维护性、扩充性。希望大家看完这篇文章能了解,学会这5个设计模式,并且以后在用的时候能想起来。

郝老三~~~~~~~~~~~~~ 5082

设计模式-创建型模式

目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。应用场景:GUI工具包中,为不同的操作系统提供统一的界面元素创建机制。描述:提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。核心思想:通过定义一个抽象层来创建一系列产品,而不是单一的产品。客户端代码使用的是由抽象工厂提供的接口,而不直接依赖于具体的产品类。优点:易于交换“系列产品”,因为具体工厂类在运行时被实例化;为大规模的产品设计提供了开放式的兼容性。// 抽象产品A// 具体产品A1。

java_green_hand0909的博客 1161

代码的艺术之路——创建型设计模式

每种设计模式,不同于网上千篇一律的定义或模板代码,我都尽可能从解决工作实际问题出发,通过代码一步步演进最终的设计模式,每种设计模式都力求讲清其来龙去脉,并解剖出一些较为独特的想法和见解,望对诸君能有所帮助!

weixin_45479946的博客 1474

Java 创建型设计模式详解

概念抽象工厂模式提供了一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。它通常用于创建一组相关产品,如操作系统的不同界面风格。结构抽象工厂类(AbstractFactory):声明创建一组相关产品的方法。具体工厂类(ConcreteFactory):实现抽象工厂的方法,生成一系列具体产品。抽象产品类(AbstractProduct):定义产品的接口。具体产品类(ConcreteProduct):实现具体产品。示例代码// 抽象产品Avoid use();

WenZhang的博客 2309

(八)基于MuJoCo的LeRobot SO100仿真操控实战指南(操作优化)

本文详细介绍了如何在MuJoCo仿真环境中搭建并优化LeRobot SO100机械臂的操控。通过两种核心模式(纯键盘仿真与实机镜像同步)的实战演示,重点讲解了关键的参数标定方法,以实现虚拟模型与真实硬件的精准同步。文章还提供了性能优化技巧,旨在帮助开发者构建高效、安全的机器人算法开发与测试流程。

weixin_29083649的博客 318

设计模式——创建型模式

创建型模式是软件工程中常用的设计模式之一,主要关注对象的创建过程。创建型模式隐藏了对象创建的细节,而不是直接使用new操作符创建对象。

2301_79654063的博客 1403

告别手动复制粘贴:3种高效合并Excel表格的方法对比(含代码)

本文对比了VBA、Power Query和Python三种高效合并Excel表格的方法,并提供了可直接运行的代码。针对不同数据量、更新频率和技术背景,详细分析了各方案的优缺点与适用场景,帮助读者告别低效的手动操作,实现自动化数据整合。

weixin_29057237的博客 441

Linux CentOS7文件系统(/dev/var)的容量扩充

原因是之前安装docker后,再想安装Nessus,系统说home、var文件系统的内存都不够。

JHoanna的博客 3226

设计模式之创建型模式详解

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。

zengchenAAA的博客 1769

ESP32 Arduino学习篇 (一) 引脚和串口的基本使用

简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制,例如LED灯,蜂鸣器,按键arduino程序首先来讲arduino程序是基于C语言,而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言知识即可实现。arduino程序是基于函数的,而在arduino的库有很多函数,我们只需要调用即可。arduino的程序主体是**setup()函数和loop()**函数以及其它在使用过程中需要构建的函数:setup()函数。

DOF526570的博客 1万+

设计模式之创建型设计模式

创建型设计模式是用于对象的创建和实例化的模式,旨在解决对象的创建问题,以便更加灵活地创建对象并将对象与使用它们的代码分离。单例模式(Singleton Pattern):确保一个类只有一个实例,并提供对该实例的全局访问点。工厂模式(Factory Pattern):定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类中。抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类。

zz18532164242的博客 766

FPGA工程师必看:JESD204B同步机制实战指南(含SYSREF信号调试技巧)

本文为FPGA工程师提供了一份JESD204B同步机制的实战指南,重点聚焦于SYSREF信号的调试技巧。文章从同步的核心逻辑出发,深入剖析了时钟、SYSREF与对齐序列这“三驾马车”的协作,并详细阐述了硬件PCB布局、FPGA IP核配置、状态机监控以及使用示波器进行波形分析等关键实战步骤,旨在帮助工程师解决多通道高速系统中的同步难题,确保链路的稳定与确定性延迟。

weixin_29239661的博客 331

国产机载操作系统天脉ACoreOS实战:从零搭建开发环境到应用移植

本文详细介绍了国产机载操作系统天脉ACoreOS的实战开发流程,从核心特性解析到开发环境搭建,再到VxWorks应用移植策略。重点阐述了其符合ARINC 653标准的时空分区架构如何保障高可靠性,并提供了从零创建分区工程、重构通信与任务代码的具体步骤,为开发者向这一国产化平台迁移提供了实用指南。

flower的专栏 633

设计模式之创建型模式

使用C++语言实现的设计模式中的创建型模式,以简单场景和类图的方式进行建模

duchenlong的博客 270

从你的全世界路过---陌陌X-SIGN还原

我们上期介绍了hook 接口方式,今天我分析so 层。学习是为了复杂的事情简单化。不用如此繁琐。跟进native_sdbyecbu37x这个函数,我们f5看伪代码 v13 = sign(v9, v10, v11, a6); 跟进这个函数 代码如下(示例): 2.代码贴入 SHA消息摘要java代码如下: java 代码如下(示例): 总结 算法,结合动态调试!

任雪飘的博客 2299

设计模式(创建型)

不使用设计模式时,手动复制每个属性不仅容易出错,还可能导致代码冗长和难以维护。尤其当类的属性较多或者可能在未来发生变化时,手动复制每个属性的成本会增加。使用建造者模式构建拥有多个属性的复杂对象时,能够显著提高代码的可读性、可维护性和灵活性,减少出错的可能性。特别是在面对具有多个可选属性的大型对象时,建造者模式是一种非常合适的设计模式。扩展灵活性:如果要添加新的订单类型,比如国际订单,只需新增一个类和,而无需修改现有代码。低耦合性。

xue2464874018的博客 978

【LLC快速上手系列】如何在LLC谐振里优雅地调死区时间?

用示波器死盯Vds波形,找到ZVS临界点;别听“经验值”,亲自调才准;死区时间并非越短越好,也不是越长越稳,而是要“刚刚好”;用热成像看MOSFET温升变化,ZVS调好了,温度马上掉2~5℃;轻载难ZVS?适当提升频率 or 降低Lr可破!

weixin_43199439的博客 493

WINCC7.3破解文件

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

设计模式-创建型模式总结

创建型模式,顾名思义,就是用来创建对象的模式。它抽象了实例化过程,帮助一个系统独立于如何创建、组合和表示它的对象。

潘威威的博客 2559

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

设计模式——创建型

3y_基础掌握 codeGuide实战 cs-notes面试前复习 B站视频讲解

kk阿彬 451

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java设计模式之创建型模式

单例模式 应用场合: 在一个JVM中,该对象只需有一个实例存在 特点: 对于创建频繁的大型对象可以降低系统开销 减轻GC压力(Garbage collection) 安全(核心交易引擎) 实现方式: 加载类时直接创建类的实例(性能提前消耗 浪费) public class Singleton { private Singleton(){}; private

yhao的博客 3823

设计模式--六种创建型模式

前言   每几种模式之间都有一定的联系,从中发现它们的相同点和不同点,研究发生改变的节点,这就是本篇博客所要说明的创建型设计模式之间的联系。它们包括:简单工厂模式、单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。 创建型模式的基本理解 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 一个类创建型模式使用继承改变被实例

冯浩月 9638

C++设计模式之创建型模式

我们一定要牢记设计模式是前人总结的一套可以有效解决问题的经验,不要一写代码就在考虑该使用什么设计模式,这是极其不可取的。正确的做法应该是在实现业务需求的同时,尽量遵守面向对象设计的六大设计原则即可。后期随着业务的扩展,你的代码会不断的演化和重构,在此过程中设计模式绝逼会大放异彩的。说实话博主写完这篇文章感觉原型模式模式是不是有点多余啊,想复制原来创建的新的对象,使用拷贝构造函数不就可以了嘛,为什么还要弄一个新的设计模式出来呢。目前博主的理解就到这啦,有兴趣的可以后台TT博主一起交流呀!

weixin_62196764的博客 1105
上一篇: Idea 插件 FindBugs 安装及使用
下一篇: 结构型设计模式
香草味小布丁
博客等级 码龄10年 461粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值