面试_java_设计模式

60 阅读2分钟

设计模式分类

  • 创建型模式:它的主要特点是 “将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者 5 种模式。
  • 结构型模式:通过类和接口间的继承和引用实现创建复杂结构的对象。包括代理、适配器、桥接、装饰、外观、享元和组合 7 种模式。
  • 行为型模式:通过类之间不同通信方式实现不同行为。包括模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录和解释器 11 种模式。




单例模式

什么是单例

保证一个类只有一个实例。要求构造方法必须是私有的,由自己创建一个静态变量存储实例,对外提供一个静态公有方法获取该实例。

优点是内存中只有一个实例,减少了开销。缺点是没有抽象层,难以扩展。

使用场景:数据库连接池、线程池



单例创建方式

1. 饿汉式

在类加载时就创建单例对象,线程安全,但不管是否使用都创建对象可能会浪费内存。

public class HungrySingleton {
    
    private HungrySingleton(){System.out.println("私有构造函数");}

    private static HungrySingleton instance = new HungrySingleton();

    public static HungrySingleton getInstance() {return instance;}
    
    
     public static void main(String[] args) {
        HungrySingleton instance = HungrySingleton.getInstance();
    }
}

2. 懒汉式

在外部调用时才创建单例对象,线程不安全。

public class LazySingleton {
    private LazySingleton(){System.out.println("私有构造函数");}

    private static LazySingleton instance;

    public static LazySingleton getInstance() {
        if(instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
    
     public static void main(String[] args) {
        LazySingleton instance = LazySingleton.getInstance();
    }
}

3. 静态内部类

结合了懒汉式和饿汉式的优点,真正需要对象的时候才会创建,并且创建时是线程安全的。

public class StaticSingleton {
    private StaticSingleton(){}

    public static StaticSingleton getInstance() {
        return StaticClass.instance;
    }

    private static class StaticClass {
        private static final StaticSingleton instance = new StaticSingleton();
    }
    
     public static void main(String[] args) {
        StaticSingleton instance = StaticSingleton.getInstance();
    }
}

4. 双重检查锁

使用 volatile 以及多重检查来减小锁范围,提升效率。


5. 枚举



www.cxyxiaowu.com/16297.html segmentfault.com/a/119000003…