设计模式-创建型-单例模式(Singleton)
参考文献
https://java-design-patterns.com/patterns/singleton/
https://www.oodesign.com/singleton-pattern
https://refactoringguru.cn/design-patterns/singleton
单例模式
保证一个类只有一个实例,并提供一个访问该实例的全局节点.
组件
在单例模式中,只有Singleton这一个角色.
Singleton角色中有一个返回唯一实例的static方法.该方法总是返回同一个实例.
实现方式
在类中添加一个私有静态成员变量用于保存单例实例.
声明一个公有静态构建方法用于获取单例实例.
在静态方法中实现"延迟初始化". 该方法会在首次被调用时创建一个新对象, 并将其存储在静态成员变量中. 此后该方法每次被调用时都返回该实例.
将类的构造函数设为私有. 类的静态方法仍能调用构造函数, 但是其他对象不能调用.
检查客户端代码, 将对单例的构造函数的调用替换为对其静态构建方法的调用.
具体实现
懒汉式
12345678910 ...
设计模式-创建型-原型模式(Prototype)
参考文献
https://www.oodesign.com/prototype-pattern
https://refactoringguru.cn/design-patterns/prototype
https://java-design-patterns.com/patterns/prototype/
原型模式
使用原型实例指定要创建的对象类型,并通过复制此原型来创建新对象.
通过复制生成实例
组件
Prototype : 负责定义用于复制现有实例来生成新实例的方法.
ConcretePrototype : 负责实现复制现有实例并生产新实例的方法.
Client : 负责使用复制实例的方法生产新的实例
123456789101112131415161718public interface Prototype { public abstract Object clone ();}public class ConcretePrototype implements Prototype { public Object clone() { ...
设计模式-创建型-对象池模式(ObjectPool)
参考文献
https://www.oodesign.com/object-pool-pattern
https://java-design-patterns.com/patterns/object-pool/
对象池模式
重用和共享创建成本高昂的对象。
当客户端请求可重用对象时,池将执行以下操作:
搜索可用的可重用对象,如果找到,它将返回给客户端。
如果没有找到可重用对象,那么它会尝试创建一个新对象。如果此操作成功,新的可重用对象将返回给客户端。
如果池无法创建新的可重用对象,则池将等待,直到释放可重用对象
组件
Reusable(可重复使用的资源) :包装有限的资源,将由多个客户端在有限的时间内共享。
Client : 使用可重用类型的实例
ReusablePool: 管理供客户端使用的可重用对象,创建和管理对象池
实现注意事项
Limited number of resources in the pool
内资源数量有限
Handling situations when creating a new resource fails
创建新 ...
设计模式-创建型-工厂方法模式(FactoryMethod)
参考文献
Java设计模式精讲 Debug方式+内存分析
<<深入设计模式>>
https://refactoringguru.cn/design-patterns/factory-method
https://www.oodesign.com/factory-method-pattern
工厂方法模式
定义一个用于创建对象的接口,但让子类决定实例化哪个类
通过通用接口引用新创建的对象
工厂方法模式通过定义一个工厂接口及其下属的多个具体工厂类,每个具体工厂类负责创建一种特定类型的对象.客户端通过调用工厂接口来创建对象,具体使用哪个具体工厂类由客户端决定.工厂方法模式将对象的创建延迟到具体工厂类中,使得工厂类成为了对象的抽象创建者.
组件
**产品(Product Interface)**定义工厂方法创建的对象的接口
**具体产品(Concrete Products Class)**是产品接口的不同实现.
创建者Creator(也称为Factory,因为它创建Product对象)声明方法FactoryMethod,该方法返回Product 对象 ...
设计模式-创建型-建造者模式(Builder)
参考文献
https://www.oodesign.com/builder-pattern
https://refactoringguru.cn/design-patterns/builder
建造者模式
定义一个实例来创建对象,但让子类决定实例化哪个类
通过通用接口引用新创建的对象
组装复杂的实例
组件
Product: 正在构建的复杂对象
Builder(建造者) : 指定用于创建 Product 对象的各个部分的抽象接口
ConcreteBuilder(具体建造者) : 通过实现 Builder 接口来构建和组合产品的各个部分.它定义并跟踪它创建的表示,并提供用于保存产品的界面
Director(监工) : 类使用 Builder 接口构造复杂对象
Client(使用者)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798 ...
设计模式-创建型-抽象工厂模式(AbstractFactory)
参考文献
抽象工厂模式
抽象工厂提供了用于创建一系列相关对象的接口,而无需显式指定它们的类.
抽象工厂模式通过定义抽象工厂接口及其下属的多个产品接口和多个产品族实现类,每个产品族实现类负责创建一组相关的产品.客户端通过调用抽象工厂接口来创建产品,具体使用哪个产品族实现类由客户端决定.抽象工厂模式将产品的创建延迟到具体产品族实现类中,使得产品的创建与使用相互独立.
上图(图片来自于refactoringguru.cn)的"装饰风艺术"的椅子,沙发,咖啡桌为一个产品族
抽象工厂的工作是将"抽象零件"组装为"抽象产品"
组件
AbstractProduct(抽象产品) : 声明产品对象类型的接口
AbstractFactory(抽象工厂) : 声明创建抽象产品的操作的接口
ConcreteProduct(具体产品) - 定义由相应的ConcreteFactory创建的产品;它实现了AbstractProduct 接口
ConcreteFactory(具体工厂) : 实现创建具体产品的操作.
C ...
设计模式-创建型-简单工厂模式(SimpleFactory)
参考文献
https://java-design-patterns.com/patterns/factory/
https://www.oodesign.com/factory-pattern
简单工厂模式
也称为简单工厂(Simple Factory)或静态工厂方法(Static Factory Method)
创建对象而不向客户端公开实例化逻辑。
通过公共接口引用新创建的对象
简单工厂模式通过一个工厂类来创建不同类型的对象,客户端只需要给工厂传入相应的参数,由工厂来根据参数判断要创建哪一种对象,并返回该对象给客户端使用。简单工厂模式的核心是工厂类,它负责创建对象。
组件
产品接口(Product Interface)
工厂类(Factory Class)
具体产品(Concrete Product Class)
具体实现
12345678910111213141516171819202122public class VideoFactory { public Video getVideo(String type) { switch (type) & ...