设计模式之(1)——简单工厂模式

创建型模式:主要用于对象的创建;

结构型模式:用于处理类或者对象的组合;

行为型模式:用于描述类或对象怎样交互和分配职责;

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

定义:简单工厂模式根据传入的参数不同,返回不同的对象,属于创建型设计模式;

模式分析:主要有三类角色:

1、Factory:工厂角色,专门用于创建实例类的工厂,该类提供一个方法,根据不同的参数返回不同的具体实例;

2、Product:抽象产品角色,所有具体实例的父类;

3、ConcreteProduct:具体产品角色,工厂真正生产的实例对象;

UML类图:

意义:简单工厂模式将对象的创建和对象本身的业务做了分离,降低了系统的耦合度,使得两者修改起来都相对容易一些;

优点:

1、实现了责任分割,提供了专门工厂类用于对象的创建;

2、客户端无需知道所创建类的具体名称和创建逻辑,只需要知道具体创建对象所对应的参数即可;

3、通过引入配置文件,可以在不修改任何客户端的代码的情况下,更换和增加具体的产品类,在一定程度上提高了系统的灵活性;

缺点:

1、工厂类集中了所有具体实例的创建逻辑,一旦不能正常工作,整个系统都会受到影响;

2、工厂模式会增加系统中类的个数,一定程度上增加了系统的复杂度和理解难度;

使用场景:

1、工厂类负责创建的对象比较少的时;

以下附demo源码:

===============================================================================================================================================

Original: https://www.cnblogs.com/wha6239/p/16627795.html
Author: 一只烤鸭朝北走
Title: 设计模式之(1)——简单工厂模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612870/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Arrays.asList()你真的知道怎么用吗?

    发现问题 前几天在看别人的项目的时候,发现一个问题,简单复现一下这个问题 // 注意这是一个Integer对象的数组哦 Integer[] arr = new Integer[]{…

    数据库 2023年6月11日
    071
  • Python学习笔记(八)–Django框架

    1.什么是框架? 框架就是程序的骨架,主体结构,也是个半成品。 2.框架的优缺点 可重用、成熟,稳健、易扩展、易维护。 3.Python中常见的框架 (1)大包大揽Django被官…

    数据库 2023年6月16日
    0115
  • dockerfile

    基本结构 Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义镜像。 Dockerfile 由一行行命令语句组成,并且支持以 # 开头…

    数据库 2023年6月14日
    086
  • 第15章 存储过程与函数

    MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即…

    数据库 2023年6月6日
    092
  • 不同分层中的对象的使用

    在项目中,控制层,业务层,数据层,视图层(返回值)。中分别使用了的对象,暂时不太理解这样做的好处,先记录下来。 如下: 控制层:也可以叫做入参对象, UserQuery userQ…

    数据库 2023年6月11日
    068
  • Mysql终端Terminal操作

    datebase管理 1.创建数据库-create 语法:create database 数据库名 character set 编码 注意:默认会存在四个数据库,其数据库中存储的是…

    数据库 2023年5月24日
    098
  • 设计模式之(6)——建造者模式

    定义:建造者模式也称为生成器模式,将一个个简单对象一步步构造成一个复杂的对象,将复杂对象的构建和它的表示分离,使得同样的构建过程有不同的表示; 主要解决:系统中复杂对象的创建过程,…

    数据库 2023年6月14日
    076
  • 普通 Docker 与 Kubernetes 对比

    Docker提供基本容器管理 API 和容器镜像文件格式Kubernetes 管理运行容器的(物理或虚拟)主机群集,如果 Docker 是 OCP 的”内核&#8221…

    数据库 2023年6月14日
    070
  • MySQL45讲之幻读

    前言 本文介绍了什么是虚读,虚读存在的问题和解决方法,以及间隙锁带来的麻烦。 [En] This paper introduces what is phantom reading,…

    数据库 2023年5月24日
    085
  • 文件传输工具:FileZilla的使用

    FileZilla FileZilla 是一款高效的 FTP 客户端工具。FileZilla 可以帮助您将本地计算机上的文件上传到虚拟主机实例中。 FileZilla 界面介绍 如…

    数据库 2023年6月11日
    087
  • 关于.netcore6图片处理(生成缩略图、验证码、加水印)发布到docker(liunx)踩到的坑

    最近在开发一个项目,需要对图片进行处理,比如生成缩略图、生成图片验证码、图片添加水印等功能,项目使用.netcore6.0开发,开发系统使用的云桌面(win10系统),由于是云桌面…

    数据库 2023年6月9日
    094
  • Linux平台Redis安装总结

    本文测试验证的操作系统为CentOS Linux release 7.8.2003 (Core),Redis版本为redis-6.0.8。 敬请注意,如有不同,请以实际情况为准。 …

    数据库 2023年6月11日
    062
  • Celery异步任务

    (1)安装celery pip install celery==4.2.1 (2)celery使用 在项目适当位置创建celery_tasks目录用于保存celery异步任务。 在…

    数据库 2023年6月14日
    076
  • Java正则表达式Pattern和Matcher类详解

    概述 Pattern类的作用在于编译正则表达式后创建一个匹配模式. Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配 Pattern类 常用方法及介绍 Pa…

    数据库 2023年6月11日
    096
  • Stripe支付介绍在asp.net mvc中开发对接,图文加代码说明

    最近一个国外的电商项目,需要对接支付功能,国内的支付一般使用微信支付、支付宝、银联等等,但国际上一般使用Paypal、Skrill、BrainTree、Stripe等,经过内部综合…

    数据库 2023年6月14日
    0107
  • 商企网络拓扑的搭建

    前段时间因为工作项目需要模拟搭建客户环境的网络拓扑结构用于验证某款网关产品的功能, 因为不是专业的网管,对于计算机网络的实践也相对较少,所以在组件网络拓扑时遇到了不少的坑,做下记录…

    数据库 2023年6月6日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球