JAVA设计模式:详解工厂模式
161 浏览量
更新于2024-08-03
收藏 18KB MD 举报
"JAVA-设计模式-创建型模式-工厂模式"
工厂模式是Java设计模式中的一个基础且重要的概念,属于创建型模式。它的主要目的是为了隔离对象的创建过程,使得客户端代码无需关心如何实例化对象,只需通过一个共同的接口或类来请求对象的创建。这有助于提高代码的灵活性、可读性和可维护性。
### 工厂模式的用途
1. 解耦:通过将对象的创建和使用分离开,客户端代码只需要与工厂接口交互,而不需要知道具体的实现细节,降低了模块间的耦合度。
2. 降低代码重复:当创建对象的过程复杂时,工厂模式可以避免在多个地方重复相同的创建代码,减少冗余。
3. 降低维护成本:如果业务逻辑发生变化,涉及到对象类型的创建,只需在工厂类中修改,不必修改使用这些对象的客户端代码。
### 工厂模式的分类
#### 1. 简单工厂模式
- 适用场景:适用于对象数量较少且创建过程简单,客户端对创建过程无特殊关注的情况。
- 角色分配:
- 工厂角色(Factory):通常使用静态方法创建产品,根据输入参数决定创建哪种产品。它是简单工厂模式的核心。
- 抽象产品角色(AbstractProduct):定义产品的公共接口,提供给客户端使用。
- 具体产品角色(ConcreteProduct):实现抽象产品接口,提供实际的产品功能。
#### 示例代码
```java
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Circle");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Rectangle");
}
}
public class SimpleShapeFactory {
public static Shape getShape(String type) {
if ("circle".equalsIgnoreCase(type)) {
return new Circle();
} else if ("rectangle".equalsIgnoreCase(type)) {
return new Rectangle();
} else {
throw new IllegalArgumentException("Invalid shape type");
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Shape circle = SimpleShapeFactory.getShape("circle");
circle.draw();
Shape rectangle = SimpleShapeFactory.getShape("rectangle");
rectangle.draw();
}
}
```
在这个例子中,`SimpleShapeFactory` 是工厂角色,`Shape` 是抽象产品角色,`Circle` 和 `Rectangle` 是具体产品角色。客户端通过调用工厂的静态方法 `getShape` 来获取所需形状的实例。
工厂模式虽然简单易用,但它的缺点在于扩展性较差,尤其是当产品种类增加时,可能需要在工厂类中不断添加条件判断,违反了开闭原则。为了解决这个问题,可以考虑使用更灵活的工厂方法模式或抽象工厂模式。
2021-06-15 上传
2021-07-16 上传
2009-11-05 上传
2023-08-28 上传
2023-08-26 上传
2023-06-09 上传
2023-10-08 上传
2023-07-29 上传
2023-06-08 上传
璐先生
- 粉丝: 991
- 资源: 190
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜