UML设计模式解析:工厂方法与单例模式
需积分: 49 119 浏览量
更新于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进行设计,可以进一步提高代码的可读性和可维护性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-03-24 上传
2012-09-12 上传
2011-01-08 上传
2013-03-11 上传
2008-12-22 上传
2018-12-31 上传
白宇翰
- 粉丝: 30
- 资源: 2万+
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南