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

设计模式之简单工厂模式

一 、定义

简单工厂模式是一种创建型设计模式,它提供一个统一的接口来创建对象,而不需要客户端直接实例化对象。简单工厂模式通过封装创建对象的逻辑,简化了对象的创建过程,同时也提高了代码的可维护性和扩展性。缺点是:每当增加具体得产品类得时候,需要更改工厂类得内容,不合符开闭原则。

简单工厂模式的使用场景包括以下几种:

  1. 当需要根据不同的条件创建不同类型的对象时,可以使用简单工厂模式。例如,根据用户的权限级别创建不同类型的用户对象。

  2. 当需要统一管理创建对象的逻辑时,可以使用简单工厂模式。例如,通过一个工厂类来创建不同类型的数据库连接对象。

  3. 当对象的创建逻辑比较复杂,包含大量的条件判断和多个步骤时,可以使用简单工厂模式。它可以将复杂的创建过程封装在一个工厂类中,使客户端只需要关注获取对象即可。

二、代码示例

下面是一个简单工厂模式的示例代码:

// 定义一个产品接口
public interface Product {void operation();
}// 具体产品类A
public class ConcreteProductA implements Product {@Overridepublic void operation() {System.out.println("ConcreteProductA operation");}
}// 具体产品类B
public class ConcreteProductB implements Product {@Overridepublic void operation() {System.out.println("ConcreteProductB operation");}
}// 简单工厂类
public class SimpleFactory {public static Product createProduct(String type) {if (type.equals("A")) {return new ConcreteProductA();} else if (type.equals("B")) {return new ConcreteProductB();} else {throw new IllegalArgumentException("Invalid type: " + type);}}
}// 客户端使用简单工厂类创建产品
public class Client {public static void main(String[] args) {Product productA = SimpleFactory.createProduct("A");productA.operation();Product productB = SimpleFactory.createProduct("B");productB.operation();}
}

上面示例中,产品接口(Product)定义了产品的操作方法,具体产品类A和B实现了该接口。简单工厂类(SimpleFactory)根据客户端传入的参数来创建不同类型的产品对象。客户端(Client)使用简单工厂类来创建产品并调用其操作方法。

通过使用简单工厂模式,客户端不需要知道具体的产品类,只需通过简单工厂类来创建产品对象。当需要新增产品时,只需要在简单工厂类中添加对应的创建逻辑即可,无需修改客户端的代码。这提高了代码的可维护性和扩展性。

注意:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。
如有错误,欢迎指出,期待和大家共同进步-------------------------------------------------------------------------------------

在这里插入图片描述


http://www.mrgr.cn/news/11654.html

相关文章:

  • npm镜像源报错 unexpected token >
  • zotero同步之infiniteCLOUD网盘 WebDAV
  • vue3组件封装系列-表格及分页-第二弹
  • word文档合并样式问题
  • 国产游戏行不行,主要还得“盘”商业模式!
  • 【Docker】Linux系统以及威联通QNAP部署思源笔记的通用教程
  • 一文读懂 DDD领域驱动设计
  • Overleaf中插图需要的pdf图片格式制作方法(python)
  • 【RST示例】Pick and Place Using RRT for Manipulators使用 RRT(快速扩展随机树)进行机械臂的抓取与放置
  • 『功能项目』技能释放【08】
  • 三种通过代码创建矢量文件的方法及例子
  • helm安装jenkins保姆级别
  • 【HTML】模拟二级菜单【附源代码】
  • day-41 零钱兑换
  • 【原创教程】电气制图01:启航EPLAN电气设计
  • 服务器机房与数据中心的区别?
  • 【ORACLE】如何使用EXPLAIN PLAN来分析 listagg() 函数的性能瓶颈?
  • 力扣1862.向下取整数对和
  • layui栅格布局设置列间距不起作用
  • DRF——Filter条件搜索模块