1 设计模式简略介绍
1.1 经典面试题
在理论开发过程中,咱们可能会用到设计模式;在追踪我的项目源码时,咱们也可能会遇到框架源码会用到设计模式;在面试中也可能会被问到设计模式的问题。比方以下问题
- 有请应用 UML 类图画出原型模式外围角色
- 原型设计模式的深拷贝和浅拷贝是什么,并写出深拷贝的两种形式的源码 (重写 clone 办法实现深拷贝、应用序列化来实现深拷贝)
-
在 Spring 框架中哪里应用到原型模式,并对源码进行剖析
beans.xml <bean id="id01" class="com.spring.bean.Monster" scope="prototype"/>
- Spring 中原型 bean 的创立,就是原型模式的利用
- 代码剖析 +Debug 源码
1.2 设计模式七大准则
设计模式常见的七大准则:1. 繁多职责准则
2. 接口隔离准则
3. 依赖倒转准则
4. 里氏替换准则
5. 开闭准则 OCP
6. 迪米特法令
7. 合成复用准则
要想深刻了解设计模式的七大准则,要求把握:
1)七大设计准则核心思想;2)可能以类图的阐明设计准则;3)在我的项目理论开发中,可能晓得哪里可能体现这些法令。
1.3 几个设计模式的背景
1.3.1 状态模式
金融借贷平台我的项目: 金融借贷平台的订单,有审核、公布、抢单等等步骤,随着操作的不同,会扭转订单的状态。改订单模块其实就能够应用状态模式,也是咱们理论工作中会常面临的表状态问题。
问题剖析: 这类代码难以应答变动,在增加一种状态时,咱们须要手动增加 if/else,在增加一种性能是也须要对所有的状态进行判断。因而会面临 diamante 越来越臃肿,难以保护,一旦某个状态解决不正确就会呈现 bug。
1.3.2 解释器模式
- 介绍解释器设计模式是什么?
- 画出解释器设计模式的 UML 类图, 剖析设计模式中的各个角色是什么?
- 请阐明 Spring 的框架中,哪里应用到了解释器设计模式,并做源码级别的剖析
- Spring 框架中 SpelExpressionParser 就应用到解释器模式
- 代码剖析 +Debug 源码 + 模式角色剖析阐明
1.3.3 单例设计模式
单例模式一共有几种实现形式?请别离用代码实现,并阐明各个实现形式的长处和毛病?
单例设计模式一共有 8 种写法:饿汉式两种、懒汉式三种、双重查看、动态外部类、枚举。
2 设计模式重要性
- 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(重复呈现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在 1990 年代从建筑设计畛域引入到计算机科学的
- 拿理论工作经验来说, 当一个我的项目开发完后,如果客户提出增新性能,怎么办?。(可扩展性, 应用设计模式,软件具备很好的扩展性)
- 如果我的项目开发完后,原来程序员到职,你接手保护该我的项目怎么办? (维护性 [ 可读性、规范性])
- 目前程序员门槛越来越高,一线 IT 公司 (大厂),都会问你在理论我的项目中应用过什么设计模式,怎么应用的,解决了什么问题。
- 设计模式在软件中哪里?
面向对象 (oo)=> 功能模块 [设计模式 + 算法 ( 数据结构)]=> 框架 [应用到多种设计模式]=> 架构 [服务器集群]。 - 如果想成为合格软件工程师,那就花工夫来钻研下设计模式是十分必要的。
如何解说设计模式:
采纳利用场景 -> 设计模式 -> 分析原理 -> 剖析实现步骤 (图解)-> 代码实现 -> 框架或我的项目源码剖析 (找到应用的中央) 的步骤解说
3 设计模式目标
编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序 (软件),具备更好:
1) 代码重用性 (即:雷同性能的代码,不必屡次编写)
2) 可读性 (即:编程规范性, 便于其余程序员的浏览和了解)
3) 可扩展性 (即:当须要减少新的性能时,十分的不便,称为可保护)
4) 可靠性 (即:当咱们减少新的性能后,对原来的性能没有影响)
5) 使程序出现高内聚,低耦合的个性
分享金句:
- 设计模式蕴含了面向对象的精华,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”
- Scott Mayers 在其巨著《Effective C++》就已经说过:C++ 新手和 C++ 老手的区别就是前者手背上有很多伤疤
4 设计模式类型
设计模式分为三种类型,共 23 种
1. 创立型模式(重点强调对象的创立):单例模式、形象工厂模式、原型模式、建造者模式、工厂模式。2. 结构型模式(站在软件结构上思考):适配器模式、桥接模式、装璜模式、组合模式、外观模式、享元模式、代理模式。3. 行为型模式(站在办法角度上思考):模版办法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式 (责任链模式)。
【留神】:不同的书籍上对分类和名称略有差异