《设计模式奇妙之旅》第1章 简介

第一章 简介

1.1 什么要写这些博客?

在我决定写这些博客的时候、已经是我在在读软件工程的本科三年级了,这意味着我距离工作找实习、找工作的时间越来越近。但我似乎准备的并没有那么充分,在之前的技术学习路线中,学习得比较离散。接触前端开发的时间最长,后端也可以做些业务,接触过RoboMaster的机器人开发、学习过安卓应用开发。但始终有些东西非常困惑我,将来找工作时什么很重要呢,听说过别人说过编程四大件:计算机网络、操作系统、数据结构与算法、设计模式。 这些知识通常在我们的大学考试中只是一场场考试,大多数学生也是考前突击。但它们真的非常重要,我们做的开发大多只是停留在业务上面,我们可能些SQL操作数据库玩得起飞,但我们也不得不为了找工作去记忆哪些我们难以理解得数据库的各种机制,去刷哪些我们感觉有些小枯燥的算法题。编码理论规范将会伴随着我们的职业生涯,在大学刚刚入学时,我并非计算机相关专业的一位学生,但当初的我总共感觉哪些写代码的人好酷呀,我也想要成为像初中、高中时代畅想的那种编码大神成为一名极客小子。但很多东西并没有我们想的那么简单,计算机的知识体系通常非常庞大,当我们的知识面够广时我们才能看懂哪些优秀的开源项目。谁有又想仅仅做一个傻瓜式的编码小子的。

1.2 关于阅读这系列博客的须知

在这个系列博客中我会用我自己通俗的理解来叙述我大脑里的东西。但由于我并非一个专家、我只是来自一位双非院校的普通得不能再普通得一个小伙子。如有我叙述的内容存在错误、不恰当之处,请大家斧正,可以在博客下留言、私信、发送邮件至[email protected] 或者 欢迎大家访问我的github :https://www.github.com/gaowanlu 。这系列的博客我只是记录一些自己的学习笔记,它的质量并不高,可能您也会发现其中有些是从别处摘抄或者借鉴的。但这些对于我并不重要,我只是想学习它,记录我的笔记,使我印象深刻。

1.3 怎样学习这个系列的博客

关于代码我将会使用Java语言来描述,我相信即使没有学过Java的同学,只要你接触过面向对象的基础知识 例如 接口、继承、多态、抽象、封装。你可能用C#、JavaScript、Python、C++等 我相信您也同样可以看懂哪些样例代码。

在学习这个系列博客之前、一定要确保您学习过面向对象的基础知识,如果您还没有它可以在网络上搜索相关学习资料,进行学习之后再来进行学习。否则您可能学习起来会面临一些编码上的理解困难。

1.4 设计模式简介

说到设计模式、我们不得不从软件工程开始谈起。软件工程是一门研究用工程化方法构建和维护有效、实用和高质量的软件的学科。(定义来源于百度百科)。做一个工程我们通常不会是单独一个人开发、我们要多人来进行协作开发、我们自己写项目想怎么写就怎么写别人不管我们,但凡涉及多人协作,我们自己的代码可能会影响到他人的开发,我们写过的代码可能会有后来的开发人员进行维护。但后来的开发者可能看了我们的代码就想辞职了。写出 可维护 可复用 可扩展 灵活性高的程序才是我们的目标。在1994年有Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。它们提出面向对象的设计原则 1、对接口编程而不是对实现编程 2、优先使用对象组合而不是继承

1.5 都有哪些设计模式

对设计模式而言,它只是一套优秀的设计规范,而并非想我们熟悉的数学这样的学科公式就是公式。如果你在解决某些问题时合理利用面向对象知识,形成了自己的编码结构设计。我想您一定也是一位别人口中的大佬了。我将会伴随大家一起来学习常见的23种大家熟知的设计模式。

1.6 设计模式的分类

  • 构建型模式
    工厂方法模式、抽象工厂模式、单例模式、建造型模式、原型模式
  • 结构型模式
    适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
  • 行为型模式
    策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

1.7 设计模式的六大原则

原则

1、开闭原则

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。

2、里氏代换原则

里氏代换原则面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。

3、依赖倒置原则

是开闭原则的基础,具体内容:对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则

使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。接口之间尽可能相互独立。

5、迪米特法则

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。 尽量少与其他实体打交道。

6、单一职责原则

一个类只负责一个功能领域中相应的职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

这是什么东西啊?

可能上面的什么原则,等一系列的东西,我们都难以理解。我认为是我们没有在经历过大量的实践应用,我们难以理解为什么要那样做,不过我们先来学习怎样编码是实现,去理解23种设计模式吗,可能当我们回过头来看,就恍然大悟了呢?加油吧、‍放弃。我们一起来学习设计模式,来进行这场快乐的奇妙之旅吧。

1.9 感谢

感谢每个朋友的支持,您的点赞、收藏、转发是我更新的动力,如果可以欢迎您在github上给我一个start。

1.8 参考

  • 设计模式的三大分类及六大原则
  • 如何学习设计模式

你可能感兴趣的:(设计模式奇妙之旅,面试,设计模式,java,面向对象,设计模式奇妙之旅)