设计模式——工厂模式01

工厂模式

定义:工厂模式是创建子类实例化对象的一种方式,屏蔽了创造工厂的内部细节。把创建对象与使用对象进行拆分,满足单一职责。如果需要向工厂中添加新商品, 只需要扩展子类再重写其工厂方法,满足开闭原则
设计模式,一定要敲代码理解


上图是对于不同类型的床进行生产

商品信息

public interface Bed {void  getInfo();
}
public class IronBed implements Bed {@Overridepublic void getInfo() {System.out.println("生产了一个铁艺床");}
}
public class RattanBed implements Bed {@Overridepublic void getInfo() {System.out.println("生产了一个藤艺床");}
}
public class WoodBed implements Bed {@Overridepublic void getInfo() {System.out.println("生产了一个实木床");}
}

工厂生产(反射)

public class BedFactory {private static  final  String CLASSPATH="com.ggbond.design01CreationalPattern.impl.";public Bed product(String bedType) throws Exception {if (bedType.isBlank()){return  null;}Class<?> clazz = Class.forName(CLASSPATH + bedType);return  (Bed) clazz.getDeclaredConstructor().newInstance();}
}

每个工厂负责生产自己的商品。如果扩充商品的话,需新加工厂与商品。
如果是很多商品,工厂模式的缺点就暴露出来:代码可能会因此变得更复杂。

具体代码获取

代码下载

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

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

相关文章

01 计算机网络发展与分类

计算机网络&#xff1a;计算机技术与通信技术的结合。 阶段一&#xff1a;早期网络&#xff1a;ARPAnet。 阶段二&#xff1a;厂商独立发展阶段 阶段三&#xff1a;标准化阶段&#xff1a;ISO,TCP/IP 计算机网络分类 计算机网络分类1&#xff1a;通信子网和资源子网 通信子…

掌握ChatGPT技巧,写出拔尖学术论文

ChatGPT无限次数:点击直达 掌握ChatGPT技巧&#xff0c;写出拔尖学术论文 引言 在当今数字化时代&#xff0c;人工智能技术的发展对学术研究也产生了深远影响。其中&#xff0c;ChatGPT作为一种强大的自然语言处理工具&#xff0c;为学术界提供了全新的可能性。本文将介绍如何…

Android Binder——Java层介绍(三)

一、简介 对于 Android 系统,一般是从 java 层到 native 层,再到 kernel 驱动层,形成一个完整的软件架构。Android 系统中的 Binder IPC 通信机制的整体架构也是如此,Java 和 C++ 层都定义有同样功能的供应用程序使用的 Binder 接口。然而 Java 层中 Framework 层的 Servic…

第十一届能源与环境研究国际会议-可再生能源走向脱碳化(ICEER 2024)即将召开!

能源和环境是当今世界至关重要的研究和教育领域&#xff0c;持续的气候危机和对可持续发展战略的迫切需求&#xff0c;需要从能源科学到地球工程等广泛领域的变革性工程解决方案和创新。ICEER 2024为来自学术界&#xff0c;研究中心和全球工业界的工程师&#xff0c;研究人员和…

以太网布局指南

2层板 顶层走信号线以及地平面底层走信号线以及地平面信号走线应至少沿一条边被接地或接地走线包围如果使用地走线&#xff0c;应接本层接地平面&#xff0c;与上层接地平面解耦。 4层板 当信号走线被重新引用到功率平面时&#xff0c;在地平面和功率平面之间需要去耦电容器(0…

4月04日,每日信息差

&#x1f396; 素材来源官方媒体/网络新闻 &#x1f384; 地震预警App被曝收10元年费&#xff0c;回应称仅限苹果系统 &#x1f30d; 2024清明档首日票房破2亿 &#x1f30b; 浙江省杭州市余杭区设立2亿元网络微短剧发展基金 &#x1f381; 抖音拟以超 7.5 亿元收购海联金汇旗下…

Vue3 Ajax(axios)

Vue 版本推荐使用 axios 来完成 ajax 请求。 安装方法 使用 cdn: <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 使用 npm: $ npm install axios GET 方法 我们可以简单的读取 JSON 数据&#xff1a; const app {data() {r…

蓝桥杯刷题 前缀和与差分-[2080]求和(C++)

题目描述 给定 n 个整数 a1, a2, , an &#xff0c;求它们两两相乘再相加的和&#xff0c;即 S a1 a2 a1 a3 a1 an a2 a3 an-2 an-1 an-2 an an-1 an 输入格式 输入的第一行包含一个整数 n 。 第二行包含 n 个整数 a1, a2, an。 输出格式 输…

langchain Chroma 构建本地向量数据库

langchain Chroma 构建本地向量数据库 # import from langchain_community.document_loaders import TextLoader from langchain_community.embeddings.sentence_transformer import (SentenceTransformerEmbeddings, ) from langchain_community.embeddings import HuggingFa…

SAP HCM 多成本中心薪酬过账标准程序解读

SAP HCM薪酬过账会涉及到CO对象&#xff0c;CO对象主要是成本中心、WBS、内部订单、订单等&#xff0c;成本中心有多个维护地方0001信息类型0027信息类型等&#xff0c;那么成本中心多个地方维护&#xff0c;优先级是如何&#xff0c;0027>1018>0001,也就是说人身上的优先…

【数据结构(一)】初识数据结构

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.集合架构3.时间和空间复杂度3.1算法效率3.2时间复杂度3.2.1大O的渐进…

IP知识详解

IP基本认识 IP 在 TCP/IP 参考模型中处于第三层&#xff0c;也就是网络层。 网络层的主要作用是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点&#xff08;end to end&#xff09;通信。 网络层与数据链路层有什么关系呢&#xff1f; IP 的作用是主机之间通信…

Golang | Leetcode Golang题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; func isMatch(s string, p string) bool {m, n : len(s), len(p)matches : func(i, j int) bool {if i 0 {return false}if p[j-1] . {return true}return s[i-1] p[j-1]}f : make([][]bool, m 1)for i : 0; i < len(f); i {f[i] m…

matlab中角度-弧度转化

在 MATLAB 中进行角度和弧度之间的转换可以使用内置的函数&#xff1a; 1. 将角度转换为弧度&#xff1a; matlab rad deg * pi / 180; 这里 deg 是你想要转换的角度值&#xff0c;pi 是 MATLAB 内置的圆周率常量。 2. 将弧度转换为角度&#xff1a; matlab…

33.Double checked locking

class Singleton {private Singleton(){}//懒汉式private volatile static Singleton singleton null;public static Singleton getInstance() {//这里使用了Double checked locking//只有第一次会进入同步代码块产生对象&#xff0c;后面就不会进入同步代码块&#xff0c;提升…

SQLite的架构(十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite下一代查询规划器(十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 介绍 本文档介绍SQLite库的架构。 这里的信息对那些想要了解或 修改SQLite的内部工作原理。 接口SQL 命令处理器虚拟机B-树…

C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。

C Primer&#xff08;第5版&#xff09; 练习 11.14 练习 11.14 扩展你在11.2.1节练习&#xff08;第378页&#xff09;中编写的孩子姓到名的map&#xff0c;添加一个pair的vector&#xff0c;保存孩子的名和生日。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#x…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

【二】Django小白三板斧

今日内容 静态文件配置 request对象方法初识 pycharm链接数据库&#xff08;MySQL&#xff09; django链接数据库&#xff08;MySQL&#xff09; Django ORM简介 利用ORM实现数据的增删查改 【一】Django小白三板斧 HttpResponse 返回字符串类型的数据 render 返回HTML文…

第20次修改了可删除可持久保存的前端html备忘录:重新布局

第20次修改了可删除可持久保存的前端html备忘录&#xff1a;重新布局 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…