设计模式
文章平均质量分 69
.
小明的笔记仓库
转载笔记来自互联网资料整理。
仅供个人学习用途。
展开
-
实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗?
在前面几节课中,我们学习了面向对象的一些理论知识,比如,面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格、基于接口而非实现编程和多用组合少用继承设计思想等等。接下来,我们再用四节课的时间,通过两个更加贴近实战的项目来进一步学习,如何将这些理论应用到实际的软件开发中。据我了解,大部分工程师都是做业务开发的,所以,今天我们讲的这个实战项目也是一个典型的业务系统开发案例。我们都知道,很多业务系统都是基于 MVC 三层架构来开发的。实际上,更确切点讲,这是一种基于贫血模型的 MVC 三层架构开发模..转载 2021-12-21 20:55:52 · 584 阅读 · 0 评论 -
10丨理论七:为何说要多用组合少用继承?如何决定该用组合还是继承?
在面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。为什么不推荐使用继承?组合相比继承有哪些优势?如何判断该用组合还是继承?今天,我们就围绕着这三个问题,来详细讲解一下这条设计原则。为什么不推荐使用继承?继承是面向对象的四大特性之一,用来表示类之间的 is-a 关系,可以解决代码复用的问题。虽然继承有诸多作用,但继承层次过深、过复杂,也会影响到代码的可维护性。所以,对于是否应该在项目中使用继承,网上有很多争议。很多人觉得继承是一种反模式,应该尽量少用,甚至不用。为什么转载 2021-12-18 19:47:18 · 230 阅读 · 0 评论 -
09为什么基于接口而非实现编程?有必要为每个类都定义接口吗?
基于接口而非实现编程。这个原则非常重要,是一种非常有效的提高代码质量的手段,在平时的开发中特别经常被用到。如何解读原则中的“接口”二字?“基于接口而非实现编程”这条原则的英文描述是:“Program to an interface, not an implementation”。理解这条原则的时候,千万不要一开始就与具体的编程语言挂钩,局限在编程语言的“接口”语法中(比如Java中的interface接口语法)。这条原则最早出现于1994年GoF的《设计模式》这本书,它先于很多编程语...转载 2021-12-15 11:18:46 · 127 阅读 · 0 评论 -
08丨理论五:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?
在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模式等等。不过,并不是所有的面向对象编程语言都支持这两个语法概念,比如,C++这种编程语言只支持抽象类,不支持接口;而像Python这样的动态编程语言,既不支持抽象类,也不支持接口。尽管有些编程语言没有提供现成的语法来支持接口和抽象类,我们仍...转载 2021-12-15 11:15:20 · 156 阅读 · 0 评论 -
07哪些代码设计看似是面向对象,实际是面向过程的?
在实际的开发工作中,很多同学对面向对象编程都有误解,总以为把所有代码都塞到类里,自然就是在进行面向对象编程了。实际上,这样的认识是不正确的。有时候,从表面上看似是面向对象编程风格的代码,从本质上看却是面向过程编程风格的。希望你通过对这三个典型例子的学习,能够做到举一反三,在平时的开发中,多留心一下自己编写的代码是否满足面向对象风格。1. 滥用 get、set方法在之前参与的项目开发中,我经常看到,有同事定义完类的属性之后,就顺手把这些属性的 getter、setter 方法都定义上。有些同.转载 2021-11-29 20:43:59 · 160 阅读 · 0 评论 -
封装、抽象、继承、多态
什么是 UML?我们是否需要 UML?讲到面向对象分析、设计、编程,我们就不得不提到另外一个概念,那就是 UML(Unified Model Language),统一建模语言。很多讲解面向对象或设计模式的书籍,常用它来画图表达面向对象或设计模式的设计思路。实际上,UML 是一种非常复杂的东西。它不仅仅包含我们常提到类图,还有用例图、顺序图、活动图、状态图、组件图等。在我看来,即便仅仅使用类图,学习成本也是很高的。就单说类之间的关系,UML 就定义了很多种,比如泛化、实现、关联、聚合、组合、依赖等..转载 2021-11-23 10:05:02 · 619 阅读 · 0 评论 -
设计模式入门
提高复杂代码的设计和开发能力大部分工程师比较熟悉的都是编程语言、工具、框架这些东西,因为每天的工作就是在框架里根据业务需求,填充代码。实际上,我刚工作的时候,也是做这类事情。相对来说,这样的工作并不需要你具备很强的代码设计能力,只要单纯地能理解业务,翻译成代码就可以了。但是,有一天,我的 leader 让我开发一个跟业务无关的比较通用的功能模块,面对这样稍微复杂的代码设计和开发,我就发现我有点力不从心,不知从何下手了。因为我知道只是完成功能、代码能用,可能并不复杂,但是要想写出易扩展、易用、易维护的原创 2021-11-22 22:38:52 · 315 阅读 · 0 评论 -
代理模式——待写
——待写原创 2021-09-13 21:22:00 · 88 阅读 · 0 评论 -
外观模式——待写
——待写原创 2021-09-13 21:21:17 · 64 阅读 · 0 评论 -
工厂模式——待写
原创 2021-09-13 21:20:14 · 69 阅读 · 0 评论 -
C++是怎么应用设计模式的?
上节课,我谈了设计模式和设计原则。今天,我就具体说说,在 C++ 里,该怎么应用单件、工厂、适配器、代理、职责链等这些经典的设计模式,用到的有 call_once()、make_unique()、async() 等 C++ 工具,希望能够给你一些在实际编码时的启发。(在接下来学的时候,你也可以同时思考一下它们都符合哪些设计原则,把设计模式和设计原则结合起来学习。)创建型模式首先来看看创建型模式,它隐藏了类的实例化过程和细节,让对象的创建独立于系统的其他部分。创建型模式不多,一共有 5 个,我转载 2021-09-13 21:17:29 · 367 阅读 · 0 评论 -
设计模式 总论
今天,我们进入最后的“总结”单元,把前面学到的这些知识上升到“理论结合实践”的高度,做个归纳整理。我们先来了解一下设计模式和设计原则,然后再把理论“落地”,综合利用所有知识点,设计并开发出一个实际的服务器应用。你可能会问了:我们这是个 C++ 的课程,为什么还要专门来讲设计模式呢?我觉得,设计模式是一门通用的技术,是指导软件开发的“金科玉律”,它不仅渗透进了 C++ 语言和库的设计(当然也包括其他编程语言),而且也是成为高效 C++ 程序员必不可缺的“心法”和“武器”。掌握了它们,理解了语言特性原创 2021-09-13 21:13:33 · 236 阅读 · 0 评论