设计模式之【工厂模式、适配器模式】

工厂模式(Factory Pattern)

定义:
工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法使一个类的实例化延迟到其子类。

主要类型:

  1. 简单工厂模式(Simple Factory Pattern): 又叫静态工厂方法,由一个工厂类根据传入的参数,决定创建哪一种产品类的实例。
  2. 工厂方法模式(Factory Method Pattern): 定义一个创建对象的接口,但让子类决定实例化哪个类。
  3. 抽象工厂模式(Abstract Factory Pattern): 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

优点:

  • 代码复用性高。
  • 隐藏了对象的创建细节。
  • 降低了代码的耦合性。

适用场景:

  • 需要创建的对象具有复杂的创建过程。
  • 客户端不需要知道实际创建的具体类。
  • 系统结构需要灵活地添加新产品。

示例代码:

// 简单工厂模式示例
public class SimpleFactory {public static Product createProduct(String type) {if (type.equals("A")) {return new ProductA();} else if (type.equals("B")) {return new ProductB();}return null;}
}public interface Product {void use();
}public class ProductA implements Product {@Overridepublic void use() {System.out.println("Using Product A");}
}public class ProductB implements Product {@Overridepublic void use() {System.out.println("Using Product B");}
}

适配器模式(Adapter Pattern)

定义:
适配器模式是一种结构型设计模式,它将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。

优点:

  • 让两个不兼容的类能够合作。
  • 提高了类的复用性。
  • 灵活性高。

适用场景:

  • 系统需要使用现有的类,而这些类的接口不符合系统的需求。
  • 需要创建一个可以复用的类,能够与其他不相关或不可预见的类(即这些类可能具有不兼容的接口)协同工作。

示例代码:

// 目标接口
public interface Target {void request();
}// 需要适配的类
public class Adaptee {public void specificRequest() {System.out.println("Specific request");}
}// 适配器类
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}// 客户端代码
public class Client {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new Adapter(adaptee);target.request();}
}

何时使用工厂模式和适配器模式

工厂模式:

  • 当对象的创建逻辑复杂且需要集中管理时。
  • 当系统需要在不修改客户端代码的情况下引入新产品时。
  • 当客户端不关心具体产品类的创建过程时。

适配器模式:

  • 当现有类的接口与客户端要求的接口不兼容时。
  • 当需要使用现有的类,但它的接口不符合需求时。
  • 当希望创建一个可以与其他不相关类或未来不可预见的类一起工作的可复用类时。

通过这些解释和代码示例,希望能帮助你更好地理解工厂模式和适配器模式及其使用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/862377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序根据蓝牙RSSI信号强度测试设备距离

背景 在做小程序连接蓝牙设备的时候,有需求表明在搜索到0.5米之内的设备时自动连接 问题: 蓝牙模组只提供了RSSI信号强度,那又该如何计算蓝牙设备距离小程序的距离呢? 解决方案 通过以下公式做大量测试:求 A、n 的平均…

​​Linux(CentOS)​​同步服务器时间之~​​chrony​​

Chrony 是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpd,Chrony 提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 Chrony 的几个关键特性和…

DIY:在您的 PC 上本地使用 Stable Diffusion AI 模型生成图像

前言 随着DALL-E-2和Midjourney的发布,您可能听说过最近 AI 生成艺术的繁荣。这些人工智能模型如何在几秒钟内创造性地生成逼真的图像,这绝对是令人兴奋的。您可以在这里查看其中的一些:DALL-E-2 gallery和Midjourney gallery 但是这些模型…

js将阿拉伯数字转为中文数字(阿拉伯数字转为金额数字,包含大写中文数字)

在之前常用的金额数字的格式化方法 里边有金额数字的格式化,以及阿拉伯数字转为中文大写金额数字的方法,在一些使用中文小写数字的时候就不适用,这里将方法进行了扩展使用更加完善 代码直接放到下方,可以直接封装成一个numberToC…

【机器学习】自然语言处理的新前沿:GPT-4与Data Analysis

目录 1、生成二维码Prompt:请用二维码编码这个信息,我爱chatgpt2、分析PDFPrompt:请分析这篇pdf的主要内容,用中文输出分析结果,100字3、设计网站Prompt:请帮我设计一个网站,网站的主题是哪吒玩…

分享10个AI搞钱副业,门槛低,普通人也能学的会!易上手!

前言 本期给大家分享的是利用AI 做副业的一些方法,大家可以挑选适合自己的赛道去搞钱 现在是人工智能时代,利用好AI 工具,可以降低普通人做副业的门槛,同时也能提高工作效率, 因此AI 赚钱的副业还是挺多的&#xff0…

测量无人船作业流程是怎样的?

在一些特殊水域测量作业中,使用有人船进行测量时受阻较多,而采用无人测量船则效率就非常高了,它是解决复杂水域测量问题最直接最有效的方式。那么,测量无人船作业流程是怎样的?下面就让小编来为大家简单介绍一下&#…

代码随想录算法训练营Day52|647.回文子串、516.最长回文子序列

回文子串 647. 回文子串 - 力扣(LeetCode) 暴力解法 遍历字符串中的所有子串,并判断是否为回文串,若为回文串,则要返回的结果1,最后返回所要求的结果,神奇的事居然能过,虽然时间和…

Java SE入门及基础(57) Java常用API 日期时间

目录 日期时间 1. Date 类 常用方法 示例 思考: 2. SimpleDateFormat 类 常用方法 常用日期格式 示例 3. Calendar 类 常用静态字段 常用方法 示例 日期时间 1. Date 类 常用方法 public Date (); // 无参构造,表示计算机系统当前时间…

PFA样品瓶带氟树脂接头试剂瓶可定制接1/4英寸管300ml

PFA带接头试剂瓶,也称作特氟龙洗气瓶,材质有PFA(可溶性聚四氟乙烯)和FEP(聚全氟乙丙烯),市场上一般问的聚四氟乙洗气瓶就是PFA洗气瓶,造型上有是2个管子接入瓶内,长进短出,带有四氟滤球,管子尺寸…

手持小风扇哪个牌子比较好?五大热门手持小风扇品牌推荐

炎炎夏日,真的需要一款随身小风扇来拯救我们的高温困境!不过,市面上的选择太多了,真的让人眼花缭乱。今天,我就给大家快速推荐五款热门的手持小风扇,它们不仅轻便易携,而且各有特色。有的是风力…

根据个人情况选择院校和专业的10大建议收藏

选择院校和专业是一个重要的决定,需要综合考虑个人情况、兴趣、职业规划以及家庭背景等多方面因素。这个口诀提供了一个简单的框架,但每个人的情况都是独特的,最终的选择应该基于个人的全面考虑。 家里有钱,学校优先:…

下穿隧道结构安全该如何保证,检测跟自动化监测该如何抉择

隧道监测背景: 隧道所处的地下环境较为复杂,易受地质条件恶化、结构损伤、退化失稳以及自然灾害等因素影响,引发隧道拱顶开裂、边墙开裂、衬砌损坏、隧道渗漏水、围岩大变形等病害,从而导致隧道安全事故发生,尤其在长期…

Flat Ads:拥抱 CTV,品牌增长新动力

近年来,CTV(联网电视)在数字营销界正迅速崛起,成为最受青睐和增长迅猛的推广形式之一。 随着更多联网设备的普及,越来越多观众正在从传统电视快速转移到流媒体环境,对传统电视广告取而代之的便是 CTV 广告。据 eMarketer 数据显示,未来四年,CTV 市值将从今年的 250 亿美元增长到…

JupyterServer配置

1. 安装jupyter ​pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout1000 2. 生成配置 jupyter notebook --generate-config 3. 修改配置,设置密码 获取密码的方式:命令行输入python后,用以下方式获…

大疆车载的第一款油车智驾:上汽大众途观L Pro的智能辅助驾驶系统

引言 在自驾行业中,有一个低调但迅速崭露头角的选手——大疆车载。自2016年成立以来,大疆车载(现已更名为卓御)通过其先进的智能驾驶技术,逐渐在市场上赢得了声誉。此次,上汽大众途观L Pro成为大疆车载首款…

一文带你彻底搞懂设计模式之单例模式!!由浅入深,图文并茂,超超超详细的单例模式讲解!!

一文带你彻底搞懂设计模式之单例模式! 一、什么是单例模式?单例模式分类饿汉式创建单例对象懒汉式创建单例对象 多问一个为什么? 二、为什么要有单例模式?使用单例模式的原因单例模式的应用场景 三、多线程下的单例模式饿汉式懒汉…

liunx各种版本配置静态网卡

文章目录 @[toc]一、centos二、 ubuntu20.04三、统信四、欧拉五、麒麟一、centos #系统版本 [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID=&quo…

鸿蒙:自定义组件、自定义函数、自定义样式

一、自定义组件 1.新建组件文件夹,新建自定义组件文件 . 2.编辑自定义组件,并通过 Component //声明组件 export struct PageHeader { //结构体private title: stringbuild() { //uiRow() {Image($rawfile(左返回.png)).width(15%)Text(this.title)…