笔记03 常用的设计模式及应用场景
以下是一些常见的设计模式及其应用场景:
-
单例模式(Singleton Pattern):用于确保一个类只有一个实例,并提供全局访问点。适用场景包括数据库连接池、线程池、日志记录器等。
- 单例模式的关键点是将类的构造方法私有化,使得外部无法直接通过new关键字创建对象。然后,通过一个静态方法或静态变量来创建并返回唯一的实例。
public class Singleton { private static Singleton instance; // 静态变量,保存唯一实例 private Singleton() { // 私有构造方法,防止外部创建对象 // 初始化操作 } public static Singleton getInstance() { if (instance == null) { // 如果实例为null,则创建一个新实例 instance = new Singleton(); } return instance; } }-
在上述代码中,Singleton类的构造方法被私有化,外部无法通过new关键字创建对象。通过getInstance()方法来获取唯一的实例,如果实例为null,则创建一个新的实例并返回,否则直接返回现有的实例。
-
使用单例模式的好处是可以确保类的实例只有一个,并且可以在全局范围内方便地访问。在需要控制资源或共享状态的情况下,使用单例模式可以提供更好的管理和控制。
-
需要注意的是,上述示例是最简单的懒汉式单例模式,存在线程安全问题。在多线程环境下,可能会出现多个线程同时判断实例为null的情况,从而创建多个实例。可以通过加锁、双重检查锁等方式来解决线程安全问题。
-
工厂模式(Factory Pattern):通过一个工厂类来创建对象,将对象的创建和使用解耦。适用场景包括多种类的对象创建、对象创建过程复杂或需要灵活扩展的情况。
-
抽象工厂模式(Abstract Factory Pattern):提供一个接口用于创建相关或依赖对象的家族,而不需要指定具体的类。适用场景包括需要创建一组相关或依赖对象的情况。
-
建造者模式(Builder Pattern):用于通过一步步构建复杂对象,将对象的构建过程与表示分离。适用场景包括构建复杂的对象,对象的构建过程需要灵活扩展或参数较多的情况。
-
原型模式(Prototype Pattern):通过复制现有对象来创建新对象,避免了使用new关键字创建对象。适用场景包括对象创建成本较高、对象的创建过程复杂或需要动态改变对象的情况。
-
适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口,解决不兼容接口的问题。适用场景包括需要复用现有类而其接口与所需环境不兼容的情况。
-
装饰器模式(Decorator Pattern):动态地给对象添加额外的职责,避免了使用继承来扩展功能。适用场景包括需要动态地为对象添加功能、避免类的膨胀和类之间的紧耦合的情况。
-
观察者模式(Observer Pattern):定义对象间的一对多依赖关系,当一个对象状态发生改变时,其所有依赖对象都会收到通知并自动更新。适用场景包括对象间存在一对多的关系、当一个对象改变需要通知其他对象的情况。
-
策略模式(Strategy Pattern):将不同的算法封装成独立的策略类,使得算法可以互相替换。适用场景包括需要在运行时根据不同的条件选择不同的算法的情况。
-
模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤的实现延迟到子类中。适用场景包括具有相似的算法,但某些步骤的实现可能不同的情况。