Java核心技术面试精讲-14 谈谈你知道的设计模式?

设计模式是人们为软件开发中相同表征的问题,抽象出的可重复利用的解决方案。在某种程度上,设计模式已经代表了一些特定情况的最佳实践,同时也起到了软件工程师之间沟通的“行话”的作用。
理解和掌握典型的设计模式,有利于我们提高沟通、设计的效率和质量。今天我要问你的问题是,谈谈你知道的设计模式?请手动实现单例模式,Spring 等框架中使用了哪些模式?

1.设计模式的三大分类

  1. 创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。
  2. 结构型模式:是针对软件设计结构的总结,把类或对象结合在一起形成一个更大的网络。
  3. 行为型模式:类和对象如何交互,及划分责任和算法。

设计模式分类

2.设计一个单例模式

单例模式有以下特点:

  1. 单例类只能有一个实例
  2. 单例类必须自己创建自己的唯一实例
  3. 单例类必须给所有其他对象提供这一实例

单例模式确保每个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机以及显卡的驱动程序对象常常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以拥有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输入到打印机中。每台计算机可以拥有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。总之,选择单例模式就是为了避免这些不一致状态。

现在,让我们实现一个单例设计模式:
它的核心有三点:

  1. 构造方法私有:不能在类外随意创建对象
  2. 在类内部声明一个本类静态的对象作为属性
  3. 提供一个公有静态的方法来获得本类对象
public class SingleTon{
	private SingleTon(){//构造方法私有:不能在类外随意创建对象
	}
	private static SingleTon instance;//在类的内部声明一个本类静态的对象作为属性
	public static SingleTon getInstance(){//提供一个公有静态的方法来获得本类对象
		if(instance==null){
			instance=new Singleton();
		}
		return instance;
	}
}

3.Spring 等框架中使用了哪些模式?

先上结论:
BeanFactory和ApplicationContext应用了工厂模式。
AOP 领域则是使用了代理模式等。
各种事件监听器,是观察者模式的典型应用。

3.1 什么是工厂模式?

想象一下你的女朋友生日要到了,你想知道她想要什么,于是你问她:“亲爱的,生日要到了你想要什么生日礼物啊?”
正巧你女朋友是个猫奴,最经迷上了抖音上的一只超级可爱的苏格兰折耳猫,她也很想要一只网红同款猫。
于是她回答你说:“亲爱的,我想要一只动物。”
你心平气和的问她:“想要什么动物啊?”
你女友说:“我想要猫科动物。”
这时你内心就纳闷了,猫科动物有老虎,狮子,豹子,猞猁,还有各种小猫,我哪里知道你要什么?
于是你问女友:“你要哪种猫科动物啊?”
“笨死了,还要哪种,肯定是小猫咪啊,难道我们家还能像迪拜土豪那样养老虎啊!”你女朋友答道。
“好好, 那你想要哪个品种的猫呢?”你问道
“我想要外国的品种, 不要中国的土猫” 你女友傲娇的回答到。
这时你已经快奔溃了,作为程序员的你再也受不了这种挤牙膏式的提问,于是你哀求到:“亲爱的,你就直接告诉我你到底想要哪个品种,哪个颜色,多大的猫?”
你女友想了想抖音的那只猫,回答道:“我想要一只灰色的,不超过1岁的苏格兰短耳猫!”
于是,你在女友生日当天到全国最大的宠物批发市场里面去,挑了一只“灰色的,不超过1岁的苏格兰短耳猫”回家送给了你女友, 圆了你女友拥有网红同款猫的梦想!*

上面中你最终买到并送给女友那只猫可以被看作是一个实例,宠物批发市场可以看作是一个工厂,我们可以认为它是一个函数,这个工厂函数里面有着各种各样的动物,那么你是如何获取到实例的呢?因为你给宠物批发市场传递了正确的参数,“color: 灰色”,“age: 不超过1岁”,”breed:苏格兰短耳”,“category:猫”

3.3 什么是观察者模式?

简单来说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象。这样一来,当被观察者状态发生变化时,就需要通知相应的观察者,使得这些观察者对象能够自动地更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值