UML设计模式解析:工厂方法与单例模式
需积分: 49 199 浏览量
更新于2024-07-13
收藏 1.28MB PPT 举报
"该资源主要讨论了工厂方法模式在实现多态性工厂中的应用,以及在UML设计模式中的体现。内容涵盖了工厂模式的种类,包括简单工厂、工厂方法和抽象工厂,还有单例模式和里氏代换原则。通过案例分析了简单工厂模式的角色和工作原理,并给出了示例代码来展示如何实现工厂方法。"
在软件设计中,工厂模式是一种常见的创建型设计模式,用于封装对象的创建过程,以便于在不修改原有代码的情况下添加新的产品类型。当系统需要频繁地添加新对象而不想暴露创建逻辑时,工厂模式显得尤为重要。
9.1.2 工厂方法模式,也称为多态性工厂模式,是工厂模式的一种具体形式。它将对象的创建延迟到子类,使得系统可以在不修改原有基类的情况下,通过扩展子类来支持新的产品类型。这样做的好处是符合开闭原则,即对扩展开放,对修改封闭。
在9.1.1简单工厂模式中,通过静态工厂方法根据传入的参数创建不同类型的对象。然而,这种模式的缺点在于,如果需要添加新的产品类型,就必须修改工厂类,这违背了开闭原则。因此,工厂方法模式引入了多态性,通过让父类定义创建产品的接口,而由子类决定创建哪个具体的产品,从而解决了这个问题。
例如,假设有一个`Road`接口,有两个实现类`railRoad`和`sandRoad`。在简单工厂模式中,`RoadFactory`类会根据参数创建`RailRoad`或`SandRoad`对象。而在工厂方法模式中,`RoadFactory`变为抽象类,提供一个创建`Road`对象的抽象方法,然后由`RailRoadFactory`和`SandRoadFactory`这样的子类分别重写此方法,以创建各自对应的产品。
代码示例展示了这种结构:
```java
// 抽象产品(接口或抽象类)
interface Road { ... }
// 具体产品
class RailRoad extends Road { ... }
class SandRoad extends Road { ... }
// 抽象工厂
abstract class RoadFactory {
public abstract Road createRoad();
}
// 具体工厂1
class RailRoadFactory extends RoadFactory {
@Override
public Road createRoad() {
return new RailRoad();
}
}
// 具体工厂2
class SandRoadFactory extends RoadFactory {
@Override
public Road createRoad() {
return new SandRoad();
}
}
```
在这个例子中,`RoadFactory`定义了创建`Road`对象的接口,而具体的创建逻辑则由`RailRoadFactory`和`SandRoadFactory`这两个子类实现。当需要添加新的道路类型时,只需要创建一个新的工厂类并实现`createRoad()`方法即可,无需修改已有代码。
此外,资源还提到了UML(统一建模语言)在设计模式中的应用,红色矩形框标注了客户依赖的部分,这是UML类图中表示类间关系和依赖的方式。在设计模式中,正确使用UML可以帮助我们更好地理解和表达设计模式的结构和行为。
工厂方法模式是实现多态性和扩展性的重要手段,它通过将对象的创建过程抽象化,使得系统能够灵活应对需求的变化。结合UML进行设计,可以进一步提高代码的可读性和可维护性。
2012-09-12 上传
2021-03-24 上传
2013-03-11 上传
2011-01-08 上传
2008-12-22 上传
2018-12-31 上传
点击了解资源详情
点击了解资源详情
白宇翰
- 粉丝: 30
- 资源: 2万+
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍