01-设计模式简介
Posted 谭继全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01-设计模式简介相关的知识,希望对你有一定的参考价值。
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 模式)、状态模式、策略模式、职责链模式(责任链模式)。
【注意】:不同的书籍上对分类和名称略有差别
以上是关于01-设计模式简介的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段
SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段
19 01 11 javascript ?????????????????????(???????????????) ??????????????????????????????(代码片段
C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段