设计模式面试题(持续更新)

150 阅读2分钟

设计模式

创建型

单例模式

确保一个类只有一个实例,并提供该实例的全局访问点。

实现方式有饿汉式(类初始化时加载)、懒汉式(懒加载节省资源,但用synchronized性能不佳)、双检锁、枚举(利用Java枚举类只会初始化一次,相当于一种饿汉式)、静态内部类(懒加载,内部的类只有在需要时才被加载,JVM保证只实例化一次)

双重校验锁的实现:

public class Singleton {
​
    private volatile static Singleton uniqueInstance;
​
    private Singleton() {
    }
​
    public static Singleton getUniqueInstance() {
        if (uniqueInstance == null) {
            synchronized (Singleton.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                }
            }
        }
        return uniqueInstance;
    }
}

简单工厂

产生耦合关系的是简单工厂类和具体产品类,实现了客户与产品之间的耦合,用于创建一个对象

工厂方法

产生耦合关系的是工厂类的实现类和产品的实现类,此方法将实例化延迟到子类决定,用于创建一个对象

抽象工厂

创建的是一个对象家族(很多具有相关性的对象),产品的实现类和工厂的实现类之间具有交叉耦合的关系

行为型

责任链

实现发送者和接收者之间的耦合关系,将这些对象组合成一条链,请求沿着链发送处理。

handler记录了后继handler是哪一个,并声明了消息处理的抽象方法。Netty的channelPipeline就是用了这一设计思想。

观察者

主题类具有注册、移除、通知所有观察者的功能,通过维护观察者列表实现

策略

定义一系列算法,并使得算法独立于使用它的客户端(解耦)

模板方法

定义算法框架,将一些步骤的实现延迟到子类,将相同的步骤抽取成父类的方法,不同的算法(步骤)放到子类去实现

结构型

装饰

为对象动态添加功能,具体的组件可以套在被装饰者上,从而动态扩展被装饰者的功能。很符合开闭设计原则。

jdk中的设计模式

cloud.tencent.com/developer/a…

Spring框架中的设计模式

juejin.cn/post/684490…