设计模式
什么是设计模式?
设计模式是一个比较抽象的概念,但是又是实实在在存在的.设计模式,可以让项目的可维护性更好,它可以很方便的用来解决大型项目里面存在的一些问题.它是为解决特定场景下的问题而定制的解决方案.
那么设计模式是怎么来的呢?
软件开发的过程中,我们一般都会面临一系列的问题.比如:我们我们写的一些代码,在后面的业务变更中,可能要对这些代码里面的类或者是模块,要进行扩展或者修改.那么我们用什么样的办法,可以使我们的代码修改起来容易呢? 所以针对这样的问题,前辈们早就已经做了大量的实践方案对它进行验证了.也就是大家都认可的方案,那么这些方案后面就变成了现在的设计模式.
设计模式的概念是相同的.不管是iOS系统还是安卓系统或者是其它的系统,都会用到这些通用的设计模式去解决一些问题.
在开发中,没有固定的一种设计模式去解决所有的问题.每种模式只是针对特定问题的解决方案,所以不要迷信设计模式,滥用设计模式.
设计模式的基本原则
设计模式有七大原则:
1.单一原则
一个类只负责一个功能领域中的相应职责.简单说:一个类负责一项职责. 这个原则的话,我们不学这设计模式,在开发中也都是这么用的.如:你写了个详情页面的model类,那么这个model类就只写你详情页面上的属性.
2.开闭原则
类、模块和函数应该对扩展开放,对修改关闭。模块应尽量在不修改原代码的情况下进行扩展。
对扩展开放: 当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为
对于修改是关闭:对模块行为进行扩展时,不必改动模块的源代码或者二进制代码.
3.里氏替换原则
任何基类可以出现的地方,子类一定可以出现
子类父类可以相互替换,子类可以用父类所有的方法.父类也可以用子类所有的, 彼此没区别
4.依赖倒转原则
抽象不依赖于细节,细节依赖于抽象.指的是接口,我们在给一个类设计接口的时候, 会用到依赖倒转原则
5.接口隔离原则
指的是在代码的接口里面,接口里面只做必要的事情,不要做其他无关的事情.在开发中很重要,严格遵守, 那么会使源码复用性很高.
6.合成/聚合复用原则
可以将已有的对象纳入到新对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能
7.最小知识原则
简单案例来巩固下我们的这些原则
这个案例是用来解释接口隔离原则,开闭原则,以及里氏代换原则.
开闭原则又是怎么回事呢?模块对扩展开放,对修改关闭.
假如我刚刚写的baseView在其它的模块里面都用到了的话,这个时候,要修改或者是扩展它,那应该怎么做?
从开闭原则这里来举例的话,我们直接新建一个类,来继承它, 并且在这个里面进行扩展.
这里讲的开闭原则, 开是对扩展开放. 它对修改是关闭的. 也就是说我们baseView里面的方法和属性, 我们是不能删除的.因为它可能会影响到其他地方的代码出现问题.
里氏代换原则(LSP)讲的是什么意思呢? 它主要讲的是父类和子类的方法,跟我们的多态差不多.
里氏替换原则要求我们的父类它必须提供尽可能多的接口,来供我们的子类来加载.
接着我们在SecondView中, 实现父类提供的抽象方法就行了.当然在SecondView中也可以写私有的方法,但是私有的方法,不能暴露接口在它的.h里面.如果暴露出来就破坏了它的封装性.
这里有一个点需要注意,里氏替换原则跟多态差不多.里氏替换原则要求子类避免重写父类方法,而多态的条件之一是: 要求子类重写父类的方法。这是他们的区别.