面试连环炮系列(31):说说你最熟悉的设计模式
1.说说你最熟悉的设计模式?
- 1)单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 2)工厂模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延伸到其子类。
- 3)观察者模式:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
- 4)策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
2.单例模式有什么用处?
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例可以节省不必要的内存开销,屏蔽对象创建的复杂性,避免对资源的多重占用。场景实例:1、一个党只能有一个书记。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
3.Spring框架用到了哪些设计模式?
- 1)静态工厂方法:Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
- 2)单例模式:Spring提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为Spring管理的是是任意的Java对象。
- 3)代理模式:Spring AOP的实现原理就是动态代理和字节码操控。
- 4)适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Spring中在对于AOP的处理中有Adapter模式的例子。
- 5)模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,比如JdbcTemplate。
4.你怎么选择合适的设计模式?
考虑设计模式怎么解决问题,找出与使用者问题相关的模式,研究模式如何相互关联,考虑设计中那些是可变的,尽可能实现强内聚松耦合。
5.设计模式的原则有哪些?
原则 | 解释 |
---|---|
单一原则(SRP) | 一个类只做一件事 |
开放-封闭原则(OCP) | 软件实体(类、模块、函数)可以拓展,但是不可修改 |
依赖倒转原则(DIP) | A.高层模块不应该依赖底层,两个都应该依赖抽。 B.抽象不应该依赖细节,细节依赖抽象 |
里氏代换原则(LSP) | 子类型必须能够替换掉它们的父类型 |
迪米特法则(LoD) | 如果两个类不必直接通信,那么这两个类不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可通过第三者发起这个调用 |
合成/聚合复用原则(CARP) | 尽量使用合成/聚合,尽量不要使用类继承 |
参考(摘抄的文字版权属于原作者)
https://blog.csdn.net/zl1zl2zl3/article/details/83689539
http://c.biancheng.net/design_pattern/
https://www.cnblogs.com/huahai/p/7270913.html
https://zhuanlan.zhihu.com/p/383813877
本文链接:https://www.codingbrick.com/archives/619.html
特别声明:除特别标注,本站文章均为原创,转载请注明作者和出处倾城架构,请勿用于任何商业用途。