设计模式常见面试题

1、说说项目中使用过的设计模式

设计模式是经过高度抽象化的在编程中可以被反复使用的代码设计经验的总结,项目中常见的有单列模式,建设者模式,策略模式,模板方法模式,外观模式

1、单列模式:单列模式是保证系统唯一性的重要的手段,单列模式首先通过把类的构造器私有化来防止程序通过其它的方式创建该类的实列,然后通过提供一个全局的唯一方法来帮助用户来获得该类的实例,用户只需要也只能通过调用该方法获得该类实列

常见的方法:1、懒汉模式 2、饿汉模式 3、双重校验锁 4 静态内部类等实现方式

应用常见:应用程序的日志应用、创建数据库连接池、多线程的线程池等

2、建造者(Builder)模式的定义:将组件和组件的组装过程分开,然后⼀步⼀步建造⼀个复杂的对象,在项目中常用来创建实体类,

  • 在要构造的类内部创建一个静态对象类builder;、
  • 静态内部类的参数和构建类一致;
  • 直接调用建造者对应的方法,为对应的属性赋值
  • 最后只要调用建造者提供的build方法即可根据我们的配置返回一个对象

3、模板方法:提供了一个抽象类,将部分逻辑以具体的方法的形式实现,然后声名一些抽象的方法来迫使子类实现的逻辑,不同的子类可以通过的不同的方式实现这些抽象的方法,从而实现不同的业务逻辑

4、外观模式

提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统使用更加容易

5、策略模式为同一个行为定义了不同的策略,并为每种策略都实现了不同的方法.使用策略模式可以避免使用多重条件if…else if…else语句,

策略模式的主要角色如下

抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
环境(Context)类:持有一个策略类的引用,环境角色使用抽象策略(Strategy)类接口调用不同的算法,最终给客户端调用。

6、工厂模式:工厂模式在接口中定义了创建对象的方法,而将具体的创建对象的过程在子类中实现,用户只需通过接口创建需要的对象即可,不用关注对象的具体创建过程。同时,不同的子类可根据需求灵活实现创建对象的不同方法

7、原型模式:原型(Prototype)模式的定义:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象

原型模式的克隆分为浅克隆和深克隆。

浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址

深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

8、适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式、对象结构型模式和接口适配器模式

适配器模式(Adapter)包含以下主要角色。

目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

9、装饰器模式:不改变原来代码和继承关系的情况下,动态的扩张类的功能,如框架controller文件提供before和after方法

装饰者模式包括source(被装饰类)和decorator(装饰类)

10、迭代器模式

提供了一个方法顺序访问一个聚合对象中各个元素,又不需要暴露该对象的内部表示

11、代理模式

代理模式指为对象提供一种通过代理的方式访问并控制该对象行为的方法,通过代理控制对象的访问,可以再这个对象调用方法之前去处理、添加新功能

12、桥接模式

桥接模式通过将抽象及其实现解耦,使得两者可以根据需求独立变化,通过定义一个抽象和实现之前的桥接  者来达到解耦的目的

桥接模式主要用于解决需求多变的情况下使用继承造成爆炸的问题,扩展起来不够灵活

13、组合模式

主要用于实现部分和整体操作的一致性,组合模式常根据树型结构表示部分及整体的关系

14、享元模式

主要通过对象的复用来减少对象的创建的次数和数量,减少系统内存的使用和减低系统的负载

15、观察者模式

观察者模式指被观察者的状态发生变化时,系统基于时间驱动理论将其状态通知到订阅其状态的观察者中,用以完成状态的修改和事件的传播

16、责任链模式

为了避免请求发送者与多个请求处理者耦合在一起,责任链模式让所有的请求处理者持有下一个对象的引用,从而将请求串联成一条链,在有请求发生的时候,可以将请求沿着这条链传递,直到遇到该对象的处理器

你可能感兴趣的:(面试题,设计模式)