当前位置: 首页 > news >正文

设计模式之工厂模式 ( Factory Pattern )(1)

其他设计模式也会后续更新…
设计模式其实需要有一定开发经验才好理解,对代码有一定的设计要求,工作中融入才是最好的

工厂模式 ( Factory Pattern )

工厂模式(Factory Pattern)提供了一种创建对象的最佳方式

工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象

工厂模式属于创建型模式
白话解释:

您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现;
使用场景:

1、 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方;
2、 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时;
优点:

1、 一个调用者想创建一个对象,只要知道其名称就可以了;
2、 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以;
3、 屏蔽产品的具体实现,调用者只关心产品的接口;
缺点:

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖
实例
一个接口

package testDesignPatterns;public interface Shape {void draw();}

实现方法之一

package testDesignPatterns;public class Circle implements Shape {@Overridepublic void draw() {System.out.println("画出一个圆圈");}}

实现方法之二

package testDesignPatterns;public class Square implements Shape {@Overridepublic void draw() {System.out.println("画出一个正方形");}}

创建工厂,生成基于给定信息的实体类的对象

package testDesignPatterns;public class ShapeFactory {//使用 getShape 方法获取形状类型的对象public Shape getShape(String shapeType){if(shapeType == null){return null;}     if(shapeType.equalsIgnoreCase("CIRCLE")){return new Circle();}  else if(shapeType.equalsIgnoreCase("SQUARE")){return new Square();}return null;}}

使用该工厂,通过传递类型信息来获取实体类的对象----获取对象

package testDesignPatterns;public class TestFactoryPattern {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();//获取 Circle 的对象,并调用它的 draw 方法Shape shape1 = shapeFactory.getShape("CIRCLE");//调用 Circle 的 draw 方法shape1.draw();//获取 Square 的对象,并调用它的 draw 方法Shape shape3 = shapeFactory.getShape("SQUARE");//调用 Square 的 draw 方法shape3.draw();}}

在这里插入图片描述

http://www.lryc.cn/news/228317.html

相关文章:

  • OpenCV入门11:轮廓提取和形状识别
  • 竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
  • Java编程--定时器/线程池/工厂模式/ ThreadPoolExecutor
  • 【python】Django——django简介、django安装、创建项目、快速上手
  • 未来之选:为什么向量数据库是您的数据管理利器
  • 隧道施工工艺流程vr线上虚拟展示成为产品3D说明书
  • Nacos(含安装)
  • 本地跑项目解决跨域问题
  • 聊聊logback的isDebugEnabled
  • ChatGPT+Roblox,元宇宙的AI叙事逻辑#Leveling Up
  • Spark算子
  • Containerd接入Harbor仓库
  • Angular 组件介绍及使用(一)
  • 2023.11.13 hive数据仓库之分区表与分桶表操作,与复杂类型的运用
  • Spring Cloud学习(七)【Docker 容器】
  • 好题分享(2023.11.5——2023.11.11)
  • 第二章 03Java基础-IDEA相关叙述
  • 第三阶段第二章——Python高阶技巧
  • 【Git】Git分支与应用分支Git标签与应用标签
  • 本地PHP搭建简单Imagewheel私人云图床,在外远程访问——“cpolar内网穿透”
  • HCIP---OSPF思维导图
  • Python实现猎人猎物优化算法(HPO)优化XGBoost回归模型(XGBRegressor算法)项目实战
  • pandas读写json的知识点
  • 图论——Dijkstra算法matlab代码
  • [MySQL] MySQL表的基础操作
  • SQL 部分解释。
  • 利用LangChain实现RAG
  • 零基础学习Matlab,适合入门级新手,了解Matlab
  • CCF ChinaSoft 2023 论坛巡礼 | 自动驾驶仿真测试论坛
  • vue封装useWatch hook支持停止监听和重启监听功能