内容提要
• 通过单例模式,边写代码边讲述设计模式 ;
• 通过代理模式,证明自己在项目里用过设计模式;
• 面试时引出设计模式话题的技巧
• 被问到相关问题时,如何全方位回答
单例模式的单线程实现方式
• 通过单例模式,确保实例化的对象只有一个
• 构造函数私有,通过静态方法对外提供对象
单例模式的多线程实现方式(可以改进)
• Synchronized代码块里写new代码,在同一个时间段里只能被一个线 程调用
• 其它线程会先排队等待进入Synchronized代码块,然后发现无 法创建对象
单例模式的多线程实现方式(双重检查)
• 其它对象发现还可以创建对象,才等待进入Synchronized代码块
• 这种实现方式还有待提升,但足以在面试中展示
通过代理模式展示架构设计能力
• 需求:客户从代理商这里取车,而代理商从厂商拿车,客户看不到厂商
• 角色1:厂商类提供sellCar方法,但客户不直接调用
通过代理模式展示架构设计能力
• 角色2,代理商提供的sellCar方法供客户调用
• 代理商的sellCar方法其实是通过调用厂商方法实现的
通过代理模式展示架构设计能力
• 客户买车时,调用的是代理商提供的方法
通过代理模式展示架构设计能力
• 能降低业务使用和业务提供者间的耦合程度
• 如果无法直接调用某服务,可以考虑用代理模式
归纳代理模式的说辞
• 在简历上写在XX项目里用到了代理模式,同时在介绍项目时带上一句, 这样面试官就会细问,可以用此引出其它设计模式
• 为什么要在项目里用到代理模式?比如,出于安全管理等原因,不能直 接调用某服务,所以引入代理模式
• 结合图和代码,讲述代理模式的实现方式
• 比如,在项目里,把一些机密数据放在了名为Secrete的机器上,同时 在该机器上启动一个起到安全代理的服务类,该代理类会检查发起请求 的模块是否有访问权限。通过这个安全代理,能有效地保护数据。
面试前准备设计模式说辞的误区
• 不是在项目里用的设计模式越多就越好,能对症下药即可
• 不仅需要讲明白设计模式的概念,更要讲清楚如何在项目里如何使用, 哪怕讲清楚一种也好
• 需要结合具体的案例讲述设计模式的框架,并讲清楚为什么要用,用了 以后对项目的可维护性可扩展性有什么帮助,而不是仅仅抽象地讲述各 种设计模式的框图
设计模式方面的亮点说辞
• 其实使用设计模式的根本原因是提升项目的可维护性;
• 在项目里,不是为了好看才用到设计模式,而是为了解决特定类型的实 际问题,从这意义上讲,我们更会关心设计模式背后包含的原则思想;
• 设计模式不仅能给出具体的解决方案,还能提供优化系统架构的思路, 所以在项目里,我们一般不会只用其中某个,而会根据一些原则来优化 我们的代码,比如经常会用到解耦合和面向接口编程等的原则;
• 除了用到设计模式之外,我们还会尽量注意设计模式背后蕴含的思想, 比如开闭原则等;
总结
1. 讲述了单例模式的三种实现方式,由此可以引出多线程话题
2. 结合实际需求,讲述了代理模式的框架和实现代码
3. 以代理模式为例,讲述了引出设计模式话题的技巧
4. 在给出设计模式使用误区的同时,给出了介绍设计模式的一些亮点说辞
5. 同时务必请关注后继讲述“设计模式背后包含的原则”这个小节,在面试时,应当整合性地抛出设计模式以及软件设计原则