面试最常问的设计模式
设计模式的分类(23种)
-
创建型(5种) 创建对象时,不直接实例化对象,根据特定场景,由程序创建对象 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 结构型(7种) 用于帮助将多个对象组织成更大的结构 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式 行为型(11种) 用于帮助系统间各对象的通信,以及如何控制复杂系统中流程 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
单例模式----要求能够返回对象的一个引用和一个获得实例的方法
-
适合场景: 需要频繁创建和销毁对象时 创建对象耗时或消耗资源过多时 使用实例:多线程的线程池设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制 分类 如果不需要延迟加载单例,可以使用枚举或者饿汉式,相对来说枚举性好于饿汉式(类初始化时,会立即加载该对象,线程天生安全,调用效率高)。 如果需要延迟加载,可以使用静态内部类或者懒汉式,相对来说静态内部类好于懒汉式(类初始化时,不会初始化该对象,真正需要使用的时候才会创建该对象)。
工厂模式
-
主要是为创建对象提供接口——降低程序的耦合性 应用场景: 编码时不确定需要哪种类的实例 使用实例:要批量生产汽车,就不需要座椅、车轮这些一一去制造然后拼装,将制造汽车所需要的制造座椅、制造车轮这些共性设计成方法写出一个接口,不同的车在实现接口后就能创造不同品牌的车,再创建一个汽车工厂类,需要什么汽车,就创建什么汽车的对象去创建什么车 Spring IOC 中的工厂模式:当容器拿到了beanName和class类型后,动态的通过反射创建具体的某个对象,最后将创建的对象放到Map中。 Spring IOC 中的工厂模式创建 Bean:如果通过传统的一层一层调用,要创建很多对象,Spring使用工厂模式,由工厂创建Bean。Spring IOC容器的工厂中有个静态的Map集合,是为了让工厂符合单例设计模式,即每个对象只生产一次,生产出对象后就存入到Map集合中,保证了实例不会重复影响程序效率。
代理模式
-
通过代理控制对象的访问,可以在这个对象调用方法之前或之后去添加新的功能,在原有代码不修改的情况下,直接在业务流程中切入新代码,增加新功能 静态代理:在程序运行前就已经存在代理类 动态代理:利用 JDK 的 API,动态的在内存中构建代理对象
观察者模式
适配器模式----将一个类的接口转换成客户希望的另外一个接口
-
适配器模式有三种: 类适配器——继承 对象适配器——继承+接口实现 接口适配器——抽象类适配 使用场景: 系统需要使用现有的类,但这些类的接口不符合系统需要 建立一个可以重复使用的类 角色分类: 目标接口(客户期待的接口)、需要适配的类、适配器(把原接口转换成目标接口) 核心思想: 实现需要适配的类的功能-----实现接口 包含客户期待的目标接口
上一篇:
Java基础知识总结(2021版)