设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 本篇为设计模式面试专题,总共收录了35道常见面试题及答案解析,希望能帮到你~ 有个博客:www.javajiagoushi.com 有个公众号:Java架构师面试网 关注后回复”面试“,送你一个面试神器哟~
1、什么是设计模式? 就是经过实践验证的用来解决特定环境下特定问题的解决方案
2、设计模式用来干什么? 寻找合适的对象 决定对象的粒度 指定对象的接口 描述对象的实现 运用复用机制 重复使用经过实践验证的正确的,用来解决某一类问题的解决方案来达到减少工作量、提高正确率等目的
3、什么是对象粒度? 对象中方法的多少就是粒度
4、基本的Java编程设计应遵循的规则? 面向接口编程,优先使用对象组合
5、设计模式的应用范围 所能解决的特定的一类问题中
6、简述什么是单例模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 在任何时间内只有一个类实例存在的模式,需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式,解决方案就是保证一个类只有一个类实例存在,本质就是实例共用同一块内存区域
7、简述什么是工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 利用工厂来解决接口选择的问题的模式 应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定 创建的对象时,就需要用到工厂模式 解决方案:定义一个创建对象的接口,让子类来决定具体实例化哪一个类 本质就是根据不同的情况来选择不同的接口
8、述什么是值对象模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 用来把一组数据封装成一个对象的模式 解决问题:在远程方法的调用次数增加的时候,相关的应用程序性能将会有很大的下降 解决方案:使用值对象的时候,可以通过仅仅一次方法调用来取得整个对象,而不是使用多次方法调用以得到对象中每个域的数值 本质:就是把需要传递的多个值封装成一个对象一次性传过去
9、代码示例:值对象模式的实现方法
public class UserModel{
private String userId;
private String userName;
public void setUserId(String id){
this.userId = id;
}
public String getUserId(){
return userId;
}
public void setUserName(String name){
this.userName = name;
}
public String getUserName(){
return userName;
}
}
10、简述什么是DAO模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 数据访问对象 解决问题:根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、 面向对象数据库、纯文件等)和供应商实现不同,持久性存储(如数据库)的访问差别也很大。如何对存储层以外的模块屏蔽这些复杂性,以提供统一的调用存储实现。程序的分布式问题 解决方案:式将数据访问逻辑抽象为特殊的资源,也就是说将系统资源的接口从 其底层访问机制中隔离出来;通过将数据访问的调用打包,数据访问对象可以 促进对于不同数据库类型和模式的数据访问。 DAO的本质就是一层屏蔽一种变化 本质:分层,是系统组件和数据源中间的适配器。(一层屏蔽一种变化)
11、代码示例:DAO模式的实现方法
public interface CustomerDAO {
public int insertCustomer(...);
public Collection selectCustomersVO(...);
}
12、什么是开放-封闭法则(OCP) 可扩展但是不可以更改已有的模块 对扩展是开放的 对修改是封闭
13、什么是替换法则(LSP) 使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用
14、如何综合使用我们学过的设计模式来构建合理的应用程序结构
是采用接口进行隔离,然后同时暴露值对象和工厂类,如果是需要数据存储的功能,又会通过DAO 模式去与数据存储层交互。
15、请列举出在JDK中几个常用的设计模式? 单例模式(Singleton pattern)用于Runtime,Calendar和其他的一些类中; 工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像Boolean.valueOf; 观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中; 装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。
16、什么是设计模式?你是否在你的代码里面使用过任何设计模式? 设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸。
17、Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式 单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime是单例模式的经典例子。从 Java 5 开始你可以使用枚举(enum)来实现线程安全的单例。
18、在 Java 中,什么叫观察者设计模式(observer design pattern)