笔记03 常用的设计模式及应用场景

以下是一些常见的设计模式及其应用场景:

  1. 单例模式(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的情况,从而创建多个实例。可以通过加锁、双重检查锁等方式来解决线程安全问题。

  2. 工厂模式(Factory Pattern):通过一个工厂类来创建对象,将对象的创建和使用解耦。适用场景包括多种类的对象创建、对象创建过程复杂或需要灵活扩展的情况。

  3. 抽象工厂模式(Abstract Factory Pattern):提供一个接口用于创建相关或依赖对象的家族,而不需要指定具体的类。适用场景包括需要创建一组相关或依赖对象的情况。

  4. 建造者模式(Builder Pattern):用于通过一步步构建复杂对象,将对象的构建过程与表示分离。适用场景包括构建复杂的对象,对象的构建过程需要灵活扩展或参数较多的情况。

  5. 原型模式(Prototype Pattern):通过复制现有对象来创建新对象,避免了使用new关键字创建对象。适用场景包括对象创建成本较高、对象的创建过程复杂或需要动态改变对象的情况。

  6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口,解决不兼容接口的问题。适用场景包括需要复用现有类而其接口与所需环境不兼容的情况。

  7. 装饰器模式(Decorator Pattern):动态地给对象添加额外的职责,避免了使用继承来扩展功能。适用场景包括需要动态地为对象添加功能、避免类的膨胀和类之间的紧耦合的情况。

  8. 观察者模式(Observer Pattern):定义对象间的一对多依赖关系,当一个对象状态发生改变时,其所有依赖对象都会收到通知并自动更新。适用场景包括对象间存在一对多的关系、当一个对象改变需要通知其他对象的情况。

  9. 策略模式(Strategy Pattern):将不同的算法封装成独立的策略类,使得算法可以互相替换。适用场景包括需要在运行时根据不同的条件选择不同的算法的情况。

  10. 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤的实现延迟到子类中。适用场景包括具有相似的算法,但某些步骤的实现可能不同的情况。

以上只是一些常见的设计模式,每个设计模式都有其特定的应用场景和使用方式。在实际开发中,根据具体的需求和问题选择合适的设计模式可以提高代码的可维护性、扩展性和重用性。