java(实验拓展)工厂模式和原型模式

server/2024/12/2 10:05:03/

工厂模式

简单来说是一种创建型设计模式,它提供了一种创建对象的最佳实践,这种模式提供了一种抽象工厂,通过使用工厂方法来创建对象。工厂方法将对象的创建推迟到子类中,这样就可以实现对象的创建和使用解耦。

一、概念

工厂模式是一种对象创建型模式,它提供了一种创建对象的最佳实践。在工厂模式中,我们在创建对象时不使用new关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂方法可以创建一组相关或不相关的对象。这样就可以将对象的创建和使用解耦。

二、实现

Java工厂模式的实现包括三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式是最基本的工厂模式,它通过一个工厂类来创建所有需要的对象。简单工厂模式将对象的创建逻辑封装在一个工厂类中,客户端通过调用工厂类的静态方法来创建对象。简单工厂模式有一个缺点,就是它违背了开闭原则,当需要添加新的对象时,需要修改工厂类的代码。

三、优点

Java工厂模式的优点包括:

  1. 可以将对象的创建和使用解耦,从而提高系统的灵活性和可维护性。

  2. 工厂模式可以隐藏对象的创建细节,使客户端只关心对象的使用,从而降低系统的复杂度。

  3. 工厂模式可以通过扩展工厂类或增加新的工厂类来添加新的产品,从而提高系统的扩展性和可维护性。

四、缺点

Java工厂模式的缺点包括:

  1. 工厂模式会增加系统的类和对象的个数,从而增加系统的复杂度。

  2. 工厂模式需要额外的工作量来创建和维护工厂类和产品类,从而增加系统的开发成本。

  3. 工厂模式可能会降低系统的性能,因为客户端需要通过调用工厂方法来创建对象,从而增加了系统的开销。

五、总结

Java工厂模式是一种常用的设计模式,它可以将对象的创建和使用解耦,从而提高系统的灵活性和可维护性。Java工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式三种形式,每种形式都有其特定的应用场景和优缺点。在实际开发中,我们需要根据具体的需求来选择合适的工厂模式。

原型模式

一、概念:

原型模式是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化类来创建对象。原型模式基于原型实例创建对象的过程,可以简化对象的创建过程,提高性能,并且可以避免直接使用构造函数进行对象的创建。

二、实现:

原型模式的克隆分为浅克隆和深克隆。

  • 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址
  • 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

在实现原型模式时,首先需要定义一个抽象原型类,其中包含一个抽象方法用于复制对象。然后具体的原型类继承抽象原型类,实现复制方法,并且能够通过复制方法创建新的对象。

三、优点:

1. 减少对象的创建时间:通过复制现有对象来创建新对象,可以减少对象的创建时间,提高性能。
2. 简化对象的创建过程:原型模式可以避免直接使用构造函数进行对象的创建,简化了对象的创建过程。
3. 可以动态添加或删除对象:通过原型模式创建对象,可以动态添加或删除原型对象,而不影响其他对象。

四、缺点:

1. 对象的深复制:在实现原型模式时,需要考虑对象的深复制问题,确保复制的对象与原对象完全独立,避免对象之间的影响。
2. 需要实现Cloneable接口:在Java中,实现原型模式需要实现Cloneable接口,并且重写clone()方法,这增加了代码的复杂性。

五、总结:

原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象复制原型自己来实现创建过程。

补充:

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制、调用、数据传递等。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。

简单来说耦合越高,可以调用的能力就降低了。


http://www.ppmy.cn/server/41817.html

相关文章

练习题(2024/5/14)

1四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#xff1a;n…

Vue 常见通信

Vue 常见通信 1、父子通信 父传子 props&#xff0c;子传父 events&#xff08;$emit&#xff09;&#xff1b; 通过父链 / 子链 通信$parent / $children&#xff1b; $refs获取ref 可以访问组件实例方法&#xff0c;&#xff1b; 提供与注射provide / inject a t t r s …

vscode切换分支及合并分支操作教程

工具&#xff1a;gitee、git 、vscode、Git Graph 点击可以看到分支管理明细。 一、前提 1、首先要有两个分支 &#xff08;1&#xff09;分支说明&#xff1a; test&#xff1a; 测试分支 feature/luo-20240508&#xff1a;自己的开发分支 &#xff08;2&#xff09;分支说…

npm无法安装node-sass 的问题

安装 node-sass 的问题呈现&#xff1a;4.9.0版本无法下载 Downloading binary from https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-72_binding.node Cannot download "https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-…

【Git教程】(十八)拆分大项目 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 拆分大项目 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现3.1 拆分模块版本库3.2 将拆分出的模块作为外部版本库集成 4️⃣ 替代解决方案 通常软件项目都是由单体小型系统开始的&#xff0c;在开发过程中项目规模和团队人员不断扩大&#xff0c; 将项目模块化会显得…

idea使用gitee基本操作流程

1.首先&#xff0c;每次要写代码前&#xff0c;先切换到自己负责的分支 点击签出。 然后拉取一次远程master分支&#xff0c;保证得到的是最新的代码。 写完代码后&#xff0c;在左侧栏有提交按钮。 点击后&#xff0c;选择更新的文件&#xff0c;输入描述内容&#xff08;必填…

正则表达式和lambda表达式

正则表达式&#xff08;Regular Expressions&#xff09;和Lambda表达式虽然都包含“表达式”一词&#xff0c;但它们在编程中的作用和用法是完全不同的。让我们详细比较一下它们的定义、用途和应用场景&#xff1a; 正则表达式 定义&#xff1a;正则表达式是一种用于匹配文本…

知识分享|XDC时钟约束的详细说明

在FPGA设计中&#xff0c;时钟约束是确保设计满足时序要求的关键。Xilinx Design Constraints (XDC) 文件允许设计者对时钟、输入/输出(I/O)和跨时钟域(CDC)路径进行精确的时序约束。以下是XDC文件中时钟约束的详细说明&#xff1a; 时钟约束的重要性 时钟约束必须最早创建&a…