设计模式遵循六大原则:
-
单一职责:一个类和方法只做一件事。
-
里氏替换:多态、子类可扩展父类。
-
依赖倒置:细节依赖抽象,下层依赖上层。
-
接口隔离:建立单一接口。
-
迪米特原则:最少知道,降低耦合。
-
开闭原则:抽象架构,扩展实现。
创建型模式
解决的问题
基本的对象创建方式可能会导致设计上存在问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。
定义
创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式来创建对象。创建型模式旨在将系统与其对象创建、结合、表示的方式分离,从而让对象创建在类型、主体、方式、时间等方面提高了系统的灵活性。
主导思想
-
将系统使用的具体类封装起来。
-
隐藏这些具体类的实例创建和结合的方式。
分类
-
对象创建模式: 处理对象的创建,即将对象创建的一部分推迟到另一个对象中。
-
类创建模式: 处理类的创建,即将其对象的创建推迟到子类中。
应用场景
软件工程往往依赖于对象的组合,而不是类的继承,强调将硬编码的行为转变为定义以组基本行为来组合成复杂的行为。
硬编码缺点: 硬编码的行为不灵活,一旦发生设计的变更,往往需要重写或重新实现才能完成。其次,硬编码重用性不高,无法对错误进行跟踪。
基于以上问题,创建型模式应运而生,创建者模式使设计变得更加灵活,提供不同的方式,从代码中移除了对需要实例化的具体类的引用,增强了对象与类之间的独立思想。
在以下场景中,往往适用创建型模式:
-
一个系统需要其对象和产品的创建互相独立。
-
一组相关的对象被设计为共同使用。
-
隐藏一个类库的具体实现,仅暴漏其接口。
-
创建独立复杂对象的不同表示。
-
一个类希望它的子类实现它所创建的对象。
-
类的实例化在运行时才指定。
-
一个类只能有一个实例,而且这个实例能在任何时候访问到。
-
实例应该能在不修改的情况下具有可创建型。
具体实例
-
工厂方法模式: 允许一个类的实例化推迟到子类中进行,即在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。
-
抽象工厂模式: 提供一个创建相关或依赖对象的接口,而无需指定对象的具体类。
-
生成器模式: 将一个复杂对象的创建与其表示相分离,使同样的创建过程可以创建不同的表示,即允许分步骤创建复杂对象,能够使用相同的创建代码生成不同类型和行是的对象。
-
原型模式: 用原型实例指定要创建的对象,通过复制原型创建新的对象,即能够复制已有对象,而又无需使代码依赖其所属的类。
-
单例模式: 保证一个类只有一个实例,并提供对这个实例的全局访问方式。
参考链接
重学 Java 设计模式:https://blog.youkuaiyun.com/generalfu/article/details/107297501
深入设计模式:https://refactoringguru.cn/design-patterns/creational-patterns