# DesignPatterns **Repository Path**: dycimage/DesignPatterns ## Basic Information - **Project Name**: DesignPatterns - **Description**: 设计模式的简单例子,配有解释和流程图。参考于:https://refactoringguru.cn/ - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-05-04 - **Last Updated**: 2024-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 设计模式 > [免费在线学习代码重构和设计模式 (refactoringguru.cn)](https://refactoringguru.cn/) > 生成各个设计模式的空白文件可以执行此[文件](https://gitee.com/dycimage/DesignPatterns/blame/master/src/test/java/design/patterns/ForTest.java#L15) 设计模式可以分为 1. 创建型模式(对已有的代码增加灵活性和复用性) 1. 工厂方法(Factory Method) 2. 抽象工厂(Abstract Factory) 3. 生成器(Builder) 4. 原型(Prototype) 5. 单例(Singleton) 2. 结构性模式 (这类模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。) 1. 适配器(Adapter) 2. 桥接(Bridge) 3. 组合(Composite) 4. 装饰(Decorator) 5. 外观(Facade) 6. 享元(Flyweight) 7. 代理(Proxy) 3. 行为型模式(这类模式负责对象间的高效沟通和职责委派。) 1. 责任链(Chain of Responsibility) 2. 命令(Command) 3. 迭代器(Iterator) 4. 中介者(Mediator) 5. 备忘录(Memento) 6. 观察者(Observer) 7. 状态(State) 8. 策略(Strategy) 9. 模板方法(Tempate Method) 10. 访问者(Visitor) ## 创建型模式 ### 工厂方法(Factory Method) > **工厂方法模式**是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。 **例子:** 你有一家运输公司,早期只通过陆地运输,运送范围有限。 后来你想扩大公司业务,不但承接陆上运输,也承接海上运输。 那么是不是应该,路上运输使用汽车,海路运输使用轮船。 如果使用工厂方法,需要找到他们很强的共同属性,即运输功能。 那么工厂便可以通过不同的运输功能进行派出不同的运输工具。 [代码](src/main/java/design/patterns/creation/A_FactoryMethod.java) 1. **优点:** - 你可以避免创建者和具体产品之间的紧密耦合。 - *单一职责原则*。 你可以将产品创建代码放在程序的单一位置, 从而使得代码更容易维护。 - *开闭原则*。 无需更改现有客户端代码, 你就可以在程序中引入新的产品类型。 2. **缺点:** - 应用工厂方法模式需要引入许多新的子类, 代码可能会因此变得更复杂。 最好的情况是将该模式引入创建者类的现有层次结构中。 3. **与其他模式的关系** - 在许多设计工作的初期都会使用[工厂方法模式](https://refactoringguru.cn/design-patterns/factory-method) (较为简单, 而且可以更方便地通过子类进行定制), 随后演化为使用[抽象工厂模式](https://refactoringguru.cn/design-patterns/abstract-factory)、 [原型模式](https://refactoringguru.cn/design-patterns/prototype)或[生成器模式](https://refactoringguru.cn/design-patterns/builder) (更灵活但更加复杂)。 - [抽象工厂模式](https://refactoringguru.cn/design-patterns/abstract-factory)通常基于一组[工厂方法](https://refactoringguru.cn/design-patterns/factory-method), 但你也可以使用[原型模式](https://refactoringguru.cn/design-patterns/prototype)来生成这些类的方法。 - 你可以同时使用[工厂方法](https://refactoringguru.cn/design-patterns/factory-method)和[迭代器模式](https://refactoringguru.cn/design-patterns/iterator)来让子类集合返回不同类型的迭代器, 并使得迭代器与集合相匹配。 - [原型](https://refactoringguru.cn/design-patterns/prototype)并不基于继承, 因此没有继承的缺点。 另一方面, *原型*需要对被复制对象进行复杂的初始化。 [工厂方法](https://refactoringguru.cn/design-patterns/factory-method)基于继承, 但是它不需要初始化步骤。 - [工厂方法](https://refactoringguru.cn/design-patterns/factory-method)是[模板方法模式](https://refactoringguru.cn/design-patterns/template-method)的一种特殊形式。 同时, *工厂方法*可以作为一个大型*模板方法*中的一个步骤。 ### 抽象工厂(Abstract Factory) ### 生成器(Builder) ### 原型(Prototype) ### 单例(Singleton) ## 结构型模式 ## 行为模式 # TODO - [ ] 代码注释 - [ ] 代码逻辑解释 - [ ] 添加文档解释? - [ ] 复制粘贴设计模式优缺点 - [ ] 对README进行更清晰的重构