晓龙吊打面试官系列:设计模式简介

文章目录

  • 一 、设计模式简介


    • 1. 什么是设计模式

    • 2. 设计模式的发展历史

    • 3. 设计模式的用途

    • 4. 设计模式的四要素

  • 二、设计模式的分类


    • 1. 创建型设计模式

    • 2. 结构型模式

    • 3. 行为型模式

  • 三、面向对象的七大原则


    • 1. 开闭原则

    • 2. 依赖倒置原则

    • 3. 单一职责原则

    • 4. 接口隔离原则

    • 5. 迪米特原则

    • 6. 里氏替换原则

    • 7. 合成复用原则


一 、设计模式简介

1. 什么是设计模式

设计模式,英文名为design pattern,是设计师为面向对象编程中一些反复出现的问题提出的一系列解决方案。设计模式这个术语最早由Erich Gamma 在1990年代从建筑设计领域引入到计算机科学中。

2. 设计模式的发展历史

肯特·贝克和沃德·坎宁安在1987年利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口的生成中。一年后Erich Gamma在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时James Coplien 在1989年至1991 年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作Advanced C++ Idioms。就在这一年Erich Gamma 得到了博士学位,然后去了美国,在那与Richard Helm, Ralph Johnson ,John Vlissides合作出版了Design Patterns – Elements of Reusable Object-Oriented Software 一书,在此书中共收录了23个设计模式。这四位作者在软件开发领域里也以他们的匿名著称Gang of Four(四人帮,简称GoF),并且是他们在此书中的协作导致了软件设计模式的突破。有时这个匿名GoF也会用于指代前面提到的那本书。

3. 设计模式的用途

设计模式的用途主要体现在三个方面:

  1. 提高学习者的思维能力

  2. 可以使编码者的代码更加标准化,工程化,提高开发效率

  3. 提高代码的可重用性,可读性强,可靠性高,灵活性好

4. 设计模式的四要素

  1. 模式名称

  2. 问题

  3. 解决方案

  4. 效果

二、设计模式的分类

涉及模式主要分为三大类,23种

1. 创建型设计模式

创建型模式(Creational Pattern) 主要是对类的实例化过程进行抽象,将软件模块中对象的创建和对象的使用分离。
主要包含:

  1. 单例模式

设计模式 – 单例模式详解

  1. 工厂方法模式

设计模式 – 工厂模式详解

  1. 抽象工厂模式

设计模式 – 工厂模式详解

  1. 建造者模式

设计模式 – 建造者模式详解

  1. 原型模式

设计模式 – 原型模式详解

2. 结构型模式

结构性模式(Structural Pattern)关注的是如何将现有的类或者对象组织在一起形成更加强大的结构。其可以分为两个小类:类结构模式和对象结构模式。
主要包含:

  1. 适配器模式

[设计模式] – 适配器模式详解

  1. 桥接模式

  2. 装饰模式

  3. 组合模式

  4. 外观模式

  5. 享元模式

  6. 代理模式

3. 行为型模式

行为型模式(Behavioral Patterns)用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。
主要包含:

  1. 模板方法模式

  2. 命令模式

  3. 迭代器模式

  4. 观察者模式

  5. 中介者模式

  6. 备忘录模式

  7. 解释器模式

  8. 状态模式

  9. 策略模式

设计模式 – 策略模式详解

  1. 责任链模式

  2. 访问者模式

三、面向对象的七大原则

面向对象设计(Object Oriented Design ,OOD)的七大原则的是Java程序员需要学习的一个基本功课,它可以极大地提升程序的可复用性和可维护性,也是重构代码的一大利器。

1. 开闭原则

开闭原则 (Open-Closed Principle,OCP) 是指一个程序应该对扩展开放,对修改关闭。所谓的开闭其实就是针对扩展和修改两个行为的限制原则。
举个简单的例子,开闭原则就像是我们平时上班制度。制度要求一天要上八小时,那么这个八小时是不允许被修改的。然而我们几点上班几点下班却是可以由公司自由决定的。

2. 依赖倒置原则

依赖倒置原则(Dependence Inversion Principle , DIP) 指的是设计代码结构时,高层模块不应该以来底层模块,二者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。简单的说就是依赖接口,不依赖实现。

3. 单一职责原则

单一职责(simple Responsibility Pinciple , SRP) 是指不要存在多于一个可能导致类变更的原因。举例来说就是修改一个职责对应的代码的时候不应该导致另外一个职责功能发生异常,这么做的目的是为了控制类的粒度大小,将对象解耦,提高内聚性。

4. 接口隔离原则

接口隔离原则 (Interface Segergation Principle ,ISP) 是指用多个专门的接口实现各自的功能而不适用一个单一的总接口,客户端不应该依赖他不需要的功能接口。

5. 迪米特原则

迪米特原则(Law of Demeter ,LOD) 是指一个对象应该对其他的对象保持最少的了解,又叫做最少知道原则。尽量降低类和类之间的耦合度。迪米特原则主要强调只与朋友交流,就比如controller只依赖service,service依赖Dao。

6. 里氏替换原则

里氏替换原则(Liskov Subsitution Principle , LSP) 是指如果一个代码逻辑适用于父类,那么一定适用于子类。

7. 合成复用原则

合成复用原则 是指尽量使用对象组合而不是通过集成达到代码复用的目的。


原文始发于微信公众号(青莲明月):晓龙吊打面试官系列:设计模式简介

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107781.html

(0)
青莲明月的头像青莲明月

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!