UML设计模式解析:工厂方法与单例模式

需积分: 49 2 下载量 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进行设计,可以进一步提高代码的可读性和可维护性。