设计模式之简单工厂模式
需积分: 0 61 浏览量
更新于2014-04-23
收藏 29KB ZIP 举报
**设计模式之简单工厂模式**
简单工厂模式是软件设计模式中的结构型模式之一,它提供了一种创建对象的最佳方式。在简单工厂模式中,我们定义一个用于创建对象的接口,但让子类决定实例化哪一个类。简单工厂模式使代码创建对象的过程变得更加灵活,同时也隔离了客户端代码与具体产品类的耦合。
**基本概念**
1. **产品接口/抽象类**:这是所有具体产品类的公共父类或接口,定义了产品的公共方法。
2. **具体产品类**:实现了产品接口或继承自产品抽象类的具体类,它们是工厂可以创建的对象。
3. **工厂类**:负责创建产品对象,它知道如何创建所有的具体产品,并且可以根据需求返回相应的产品实例。
**优缺点**
**优点**
1. **封装性**:客户端无需知道具体产品类的实现细节,只需要知道产品接口即可。
2. **扩展性**:增加新的产品类时,无需修改已有客户端代码,符合开闭原则。
3. **方便客户端使用**:客户端只需要通过工厂类来获取所需对象,降低了复杂性。
**缺点**
1. **违背了单一职责原则**:工厂类同时负责创建对象和判断创建哪种对象,职责过重。
2. **扩展困难**:如果要新增一个产品类,需要修改工厂类,这违背了开放封闭原则。
3. **不利于测试**:由于工厂类集中了大量的实例化操作,如果这些操作有问题,测试会比较困难。
**应用场景**
简单工厂模式常用于以下场景:
1. 当系统中产品类不多,且不会频繁增加新产品时。
2. 客户端只知道产品的接口,而不需要知道产品的具体类。
3. 需要创建的对象具有共同的接口或基类。
**代码示例**
在这个`SimpleFactory`压缩包中,通常包含以下几个文件:
1. `Product`接口或抽象类:定义产品的行为。
2. `ConcreteProduct1`, `ConcreteProduct2`等:具体产品类,实现`Product`接口或继承自抽象类。
3. `SimpleFactory`类:工厂类,根据条件创建不同的产品实例。
例如:
```java
// Product 接口
public interface Product {
void operate();
}
// ConcreteProduct1 类
public class ConcreteProduct1 implements Product {
@Override
public void operate() {
System.out.println("ConcreteProduct1 is operating.");
}
}
// ConcreteProduct2 类
public class ConcreteProduct2 implements Product {
@Override
public void operate() {
System.out.println("ConcreteProduct2 is operating.");
}
}
// SimpleFactory 类
public class SimpleFactory {
public static Product createProduct(String type) {
if ("type1".equals(type)) {
return new ConcreteProduct1();
} else if ("type2".equals(type)) {
return new ConcreteProduct2();
} else {
throw new IllegalArgumentException("Invalid product type");
}
}
}
```
客户端使用:
```java
public class Client {
public static void main(String[] args) {
Product product1 = SimpleFactory.createProduct("type1");
product1.operate();
Product product2 = SimpleFactory.createProduct("type2");
product2.operate();
}
}
```
以上就是简单工厂模式的基本介绍及其在实际应用中的作用。通过这个模式,我们可以更好地管理和控制对象的创建,提高代码的可维护性和可扩展性。
![avatar](https://profile-avatar.csdnimg.cn/2b123d9bde104cc2b004810424a4a8d1_maonongwu.jpg!1)
ABCDEF
- 粉丝: 13
- 资源: 23
最新资源
- 探究动态渗透率模型下的天然气水合物降压开采:深度数值模拟分析与研究,探究动态渗透率模型下的天然气水合物降压开采:精细数值模拟与分析研究,基于动态渗透率模型的天然气水合物降压开采数值模拟研究 ,基于动态
- 基于动态渗透率模型下的天然气水合物降压开采过程数值模拟研究:探索开采策略与影响因素分析,基于动态渗透率模型与数值模拟的天然气水合物降压开采技术研究与应用分析,基于动态渗透率模型的天然气水合物降压开采数
- 煤层开挖过程与邻近煤岩层应力变形场变化及保护层效应研究模型,煤层开挖过程应力变形场变化及瓦斯流动弹塑性模型研究,煤层工作开挖过程,会引起邻近煤岩层应力、变形场发生变化,以及引起临近煤层卸压,从而达到保
- 电气安全专业基础-.pdf
- 利用PID控制器模拟智能控温建筑房间温度-Simulink在MATLAB中的实现及详细pdf介绍,基于Simulink的MATLAB环境的PID控制器模拟,实现对房间温度的精准控制附带详细pdf介绍
- 一个用 c 语言编写的学生成绩管理系统源码
- STM32微控制器的入门教程,涵盖基础知识、开发环境搭建、常用功能实现及学习路径
- 直流电机双闭环调速控制系统仿真模型:转速与电流双闭环PI控制研究及Matlab Simulink应用报告,直流电机双闭环调速控制系统仿真模型研究:转速与电流双闭环PI控制算法的探索与实践(基于Matl
- 基于Matlab Simulink的四机两区域与IEEE 39节点系统短路故障分析与潮流计算研究,基于Matlab Simulink的四机两区域与IEEE 39节点系统短路故障分析与潮流计算研究,Ma
- 一个用 c 语言编写的链表实现栈的源码
- VSG并联技术详解:专业讲解视频带你深入了解其运作原理与实际应用,VSG并联技术详解:专业讲解视频带你深入了解并联运行原理与操作应用,VSG并联,有对应讲解视频 ,VSG并联; 对应讲解视频; 电力技
- 健康评分主要受运动频率、胆固醇水平和年龄的影响
- 2000-2019年上市公司银企关系数据.xls
- Matlab Simulink下的双馈风机风电调频技术研究:含虚拟惯性惯量控制与下垂控制,快速仿真达20秒,基于MATLAB Simulink的双馈风机风电调频技术:包含虚拟惯性惯量与下垂控制策略的快
- 基于煤层渗透扩散特性消除的煤与瓦斯气固耦合模型研究:建立修正P-M渗透率模型与多物理场耦合关系分析,煤层瓦斯渗透扩散的深部采煤影响与煤固气耦合模型的构建与应用研究,立足于消除煤层渗透及扩散特性对于煤与
- Matlab Simulink下的风光火储联合调频系统:混合储能优化与等值系统分析,风电三相电压电流离散模型仿真研究,Matlab Simulink下的风光火储联合调频系统:混合储能优化与等值系统分析