面试连环炮系列(二十二):常用的设计模式有哪些
常用的设计模式有哪些,作用是什么
设计模式一共23种,常用的设计模式有:工厂模式: 构建多个对象的工厂。
单例模式:单例类负责创建自己的对象,同时确保只有单个对象被创建
代理模式:代理其他类,增强原来类的功能。
外观模式:包装多个类的复杂性,对外提供统一的方法。
责任链模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
单例模式的懒汉和饿汉模式你了解吗
懒汉模式:太懒了,第一次用的时候才去实例化,适合使用量较小的情况。
public class Singleton { private Singleton() { } private static Singleton singleton = null; public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
饿汉模式:很勤快,类定义的时候就实例化了。线程安全的,适合访问量比较大的情况。
public class Singleton { private Singleton(){ } private static final Singleton singleton = new Singleton(); public static Singleton getInstance(){ return singleton; } }
Spring框架用到了哪些设计模式
静态工厂方法: Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
单例模式:Spring提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为Spring管理的是是任意的Java对象。
代理模式:Spring AOP的实现原理就是动态代理和字节码操控。
适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Spring中在对于AOP的处理中有Adapter模式的例子。
模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,比如JdbcTemplate
你怎么选择合适的设计模式
考虑设计模式怎么解决问题,找出与使用者问题相关的模式,研究模式如何相互关联,考虑设计中那些是可变的,尽可能实现强内聚,松耦合。
参考(摘抄的文字版权属于原作者):
https://blog.csdn.net/zl1zl2zl3/article/details/83689539
http://c.biancheng.net/design_pattern/
https://www.cnblogs.com/huahai/p/7270913.html