所有的设计模式都是围绕着面向对象编程技术而产生的,所以如果说想学好设计模式,首先需要搞清楚面向对象编程,梳理清楚下列的几个问题,能更好的学习设计模式
为什么要学面向对象编程?
有不少的程序员对面向对象编程一知半解或不了解,仍然在从事着该工作,但编程和打游戏一样,水平有高低,如果对面向对象编程不了解,那水平就处在比较低的位置。在面向对象编程技术问世前,编程是面向过程的,关注的是业务流程通过程序来实现,但随着业务的不断复杂化,面向过程开发让程序变得日益臃肿,难以维护。然后,面向对象编程技术随之出现,该技术用来应对不断变化的需求和复杂的业务,使代码在这些变化中也可以易于维护,易于拓展。而设计模式只不过是对面向对象技术的运用,前人根据经验总结了23种运用面向对象技术在特定需求中的运用,美其名曰“设计模式”。所以学习面向对象编程和设计模式可以让你编写出高质量的代码;可以提高编写复杂代码的设计和开发能力;在学习开源框架或复杂的源码时能事半功倍;也是成为技术大牛所需要掌握的。
我有学习设计模式的必要吗?
如果是初级程序员,工作中不涉及到架构和重构系统方面的工作,设计模式对你的帮助不会太大。如果已经脱离了初级程序员,希望写出高质量的代码;希望提高设计和开发复杂代码的能力;希望更好的学习开源框架;希望能成为技术大牛,那学习面向对象技术和设计模式将是你不二之选。
学好了设计模式对我有什么好处?
- 可以方便我们复用前人的成熟方案
- 对需求分析更加得心应手
- 增加代码的可维护性
- 实现代码的可重用
- 减少了团队沟通的成本
- 求职面试时的加分项
面向对象技术有哪些重要的概念?
- 面向对象的四大特性:封装、抽象、继承、多态
- 面向对象和面向过程开发的区别和联系
- 面向对象的分析、设计和开发技术
- 接口和抽象在实际开发中的运用
- 继承和组合的运用
面向对象有哪些设计原则?
SOLID原则 :单一职责原则(SRP) —— 定义是就一个类来说,应该仅有一个引起它变化的原因。举个例子就清楚了:后端程序员在小公司可能除了后端开发,还需要前端开发,甚至还有的需要有美工基础,这就是典型的不符合单一职责。
SOLID原则 :开闭原则(OCP)—— 定义是对扩展开放,对修改关闭。说白了就是一个程序应该通过扩展来实现变化,而不是通过修改已有的代码实现变化。.net core里面的中间件就是通过扩展方法来实现的,很好的诠释了开闭原则。
SOLID原则 :里式替换原则(LSP)—— 定义是所有引用基类的地方必须能够透明地使用其子类的对象。简单来说就是只要父类能出现的地方子类就可以出现,但反过来就不一定,因为子类可以扩展父类没有的方法。其实还可以这么理解,子类不能覆盖父类的方法,子类的范围一定是完全包含了父类的。
SOLID原则 :依赖倒置原则(DIP)—— 定义是高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。这个原则其实是我们常说的面向接口编程。在后面的设计模式中大量使用了这个原则,各位看官后面碰到在回顾下。
SOLID原则 :接口隔离原则(ISP)—— 定义是客户端不应该被迫依赖于它不使用的方法。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上。从定义上就很好理解了,就是尽量缩小一个接口的体积,能拆分的就拆分。
迪米特法则(LOD)—— 也被称为最少知识原则,一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解。迪米特法则的目的在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块相互独立,相互之间不存在依赖关系。外观模式和中介者模式都运用了这个原则。
DRY原则(DRY)—— 该原则就是不做重复的事情(Don’t Repeat Yourself),DRY原则规定,在整个系统中,每一个小的知识块只可能发生一次,且每个知识块有一个单一、明确、权威的表征。简单来说就是在代码中有多次出现雷同的代码段,这时就需要考虑是不是可以对雷同的代码段提取出来,成为一个独立的代码。
KISS原则 (KISS)—— 该原则强调代码应该尽量简单、一目了然(Keep It Simple,Stupid),KISS原则应用在很多方面,在编程领域,则主要体现在对同一个需求如何让实现的代码一目了然,逻辑清晰,结构层次分明,一看就能明白。
YAGNI原则(YAGNI)—— 适可而止(You Ain’t Gonna Need It),该原则指的是只需要将程序必须的功能包含进来,而不要试图添加任何其他你认为可能需要的功能。从本质上来说该原则和KISS相似,都是让代码尽量简单,只是侧重点不同,强调减少不必要的工作。
设计模式如何分类的?
经典的设计模式有23种,可以被分为三大类:创建型、结构型、行为型,而每种模式的应用频率也不相同
1.创建型
- 常用的:单例模式、工厂模式、建造者模式
- 不常用:原型模式
1.结构型
- 常用的:代理模式、桥接模式、装饰者模式、适配器模式
- 不常用:门面模式、组合模式、享元模式
1.行为型
- 常用的:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式
- 不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介者模式