Java 深入探究讲解简单工厂模式
作者:静静子? 时间:2022-12-25 12:02:06
1. 简单工厂介绍
简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。
注意:简单工厂模式 不属于23种设计模式之列
2. 简单工厂类图UML
3. 简单工厂角色说明
简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创建所需的产品对象。
抽象产品(Product):是简单工厂创建所有对象的父类,负责描述所有实例公有的公共接口
具体产品(ConcreteProduct):是简单工厂创建的具体对象
4. 代码实现
简单工厂实现:
/**
* 抽象产品,提供所有具体产品的共有的方法
*/
public interface Product {
public void show();
}
/**
* 具体产品1
*/
public class ConcreteProduct1 implements Product {
@Override
public void show() {
System.out.println("具体产品1展示...");
}
}
/**
* 具体产品2
*/
public class ConcreteProduct2 implements Product {
@Override
public void show() {
System.out.println("具体产品2展示...");
}
}
/**
* 简单工厂
*/
public class SimpleFactory {
//提供一个方法,基于不同的参数获取不同的实例对象
public static Product getConcreteProduct(int productType) {
switch (productType) {
case Const.Product1:
return new ConcreteProduct1();
case Const.Product2:
return new ConcreteProduct2();
case Const.Product3:
return new ConcreteProduct3();
}
return null;
}
final class Const {
static final int Product1 = 1;//表示是ConcreteProduct1产品
static final int Product2 = 2;//表示是ConcreteProduct2产品
static final int Product3 = 3;//表示是ConcreteProduct3产品
}
调用方式:
//获取产品1
Product product = SimpleFactory.getConcreteProduct(Const.Product1);
product.show();
//获取产品2
Product product1 = SimpleFactory.getConcreteProduct(Const.Product2);
product1.show();
使用步骤:
创建抽象产品类和定义具体产品的公共接口
创建具体产品类,定义生产的具体产品
创建工厂类,通过创建静态方法根据传入不同的参数从而创建不同的具体产品的实例
外界通过调用工厂类的静态方法,传入不同的参数创建不同的产品实例
5. 优缺点
优点:
代码逻辑比较简单,工厂类包含必要的创建对象的逻辑,可以决定创建具体的产品
调用方无需指导所创建具体产品的类名,只需要知道参数即可
缺点:
简单工厂违背开闭原则,工厂类负责产品的创建职责过重,一旦新增产品需要对工厂类内部逻辑新增判断
系统扩展困难,产品过多会造成逻辑过于复杂
6. 使用场景
对于产品种类比较少的情况,可以考虑使用简单工厂,调用方只需要传入工厂类的参数,不需要关注如何创建的逻辑.
来源:https://blog.csdn.net/qq_45981295/article/details/122362784
标签:Java,简单工厂,设计模式
0
投稿
猜你喜欢
使用IntelliJ IDEA搭建SSM框架的图文教程
2022-06-14 00:56:19
C#动态加载dll扩展系统功能的方法
2022-08-08 23:23:15
Android中ADB命令用法大结局
2022-12-18 10:36:28
Java常见的阻塞队列总结
2022-10-03 10:12:06
Java详细分析String类与StringBuffer和StringBuilder的使用方法
2022-04-23 15:23:30
Android Studio 3.6 layout文件text模式切换问题
2022-10-06 11:28:32
Android Retrofit实现多图片/文件、图文上传功能
2021-11-01 00:23:47
java面试常问的Runnable和Callable的区别
2023-11-23 09:23:28
IDEA远程连接HBase及其Java API实战详解
2023-11-27 21:54:46
深入浅出讲解Java集合之Collection接口
2023-05-27 05:53:38
给c#添加SetTimeout和SetInterval函数
2021-07-02 00:58:08
MyBatis测试报错:Cannot determine value type from string 'xxx'的解决办法
2023-03-26 07:19:46
Java移动文件夹及其所有子文件与子文件夹
2023-08-01 09:53:38
Android使用setContentView实现页面的转换效果
2021-07-30 15:13:32
Unity3D绘制地形的实现方法
2022-12-01 01:06:46
C#中使用DevExpress中的ChartControl实现极坐标图的案例详解
2022-12-05 06:30:39
JavaWeb详细讲述Cookie和Session的概念
2022-03-23 08:39:44
C#操作DataGridView获取或设置当前单元格的内容
2022-04-01 14:44:25
Java使用application.property读取文件里面的值
2023-11-01 07:24:56
Java实现DFA算法对敏感词、广告词过滤功能示例
2023-02-11 10:24:33