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

工厂模式之简单工厂模式(常用)

工厂模式的分类

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式

简单工厂模式 

        简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

        其实就是将一个具体类的实例化交给一个静态工厂方法来执行,它不属于GOF的23种设计模式,但现实中却经常会用到,而且思想也非常简单。

简单工厂模式的结构 

        注意:看完三种工厂模式的精讲,我觉得是差不多的,思想也都差不多,主要是理解找个合适的地方的使用。

工厂角色(Creator)是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品角色(Product)是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。
具体产品角色(Concrete Product)继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该

简单工厂模式的使用场景 

         只有一个工厂类,所以工厂类中创建的对象不能太多,否则工厂类的业务逻辑就太复杂了,不易维护和扩展。另外由于工厂类封装了对象的创建过程,所以客户端不关心对象的创建过程,只需要知道类型就好。

(1)需要创建的对象较少。  

(2)客户端只需要知道所需对象的类型。

简单实例代码

//定义抽象产品类:
public abstract class Product {public abstract void use();
}//定义具体产品类:
public class ProductA extends Product {@Overridepublic void use() {System.out.println("使用产品A");}
}public class ProductB extends Product {@Overridepublic void use() {System.out.println("使用产品B");}
}//定义工厂类:
public class ProductFactory {public static Product createProduct(String type) {if ("A".equals(type)) {return new ProductA();} else if ("B".equals(type)) {return new ProductB();} else {throw new IllegalArgumentException("产品类型不存在");}}
}//调用客户端创建产品(实例):
public class Client {     public static void main(String[] args) {      Product productA = ProductFactory.createProduct("A");            Product productB = ProductFactory.createProduct("B");  productA.use();  // 输出:使用产品A      productB.use();  // 输出:使用产品B   }
}

 其实有时候看代码能够更清楚的理解定义。

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

相关文章:

  • Kafka入门教程与详解(一)
  • GoFrame学习随便记1
  • 最新自动定位版本付费进群系统源码
  • freeswitch的一个性能问题
  • 各机构如何加强网络渗透、“渗透”防御
  • Docker命令 常用中间件运维部署,方便构建自己服务
  • Android——gradle构建知识片-散装版
  • 3.3 Windows驱动开发:内核MDL读写进程内存
  • 开源与闭源:驾驭大模型未来的关键决断
  • 面向对象成员之属性
  • 第六十二周周报
  • 【机器学习】 特征工程:特征预处理,归一化、标准化、处理缺失值
  • 【深度学习实验】网络优化与正则化(七):超参数优化方法——网格搜索、随机搜索、贝叶斯优化、动态资源分配、神经架构搜索
  • 简单漂亮的首页
  • SSM项目初始化流程与操作概念解释-SpringBoot简化版
  • Angular 路由无缝导航的实现与应用(六)
  • quickapp_快应用_tabBar
  • PCL_点云分割_基于法线微分分割
  • 计算机毕业论文内容参考|基于深度学习的交通标识智能识别系统的设计与维护
  • SELinux零知识学习十六、SELinux策略语言之类型强制(1)
  • 轻量封装WebGPU渲染系统示例<34>-数据驱动之Json构建场景
  • 全局异常拦截和Spring Security认证异常的拦截的顺序
  • Hive Lateral View explode列为空时导致数据异常丢失
  • 音频类型转换工具-可执行文件exe/dmg制作
  • 【Proteus仿真】【51单片机】公交车报站系统
  • C++--STL总结
  • Python----图像的手绘效果
  • Android13集成paho.mqtt.android启动异常
  • STM框架之按键扫描新思路
  • Linux服务器挂载另一台服务器的文件夹(mount)