- 单一职责原则
就像上次所说的《查理的巧克力工厂》中所说的,查理如果想吃巧克力棒,他让旺卡把巧克力棒制造师叫过来帮他做就好了。但是如果一开始旺卡成立工厂的时候为了节省开支,他招了一个巧克力制作师,会制作巧克力棒、巧克力糖、巧克力饮料。这样有个好处,就是查理把他找来之后,可以同时吃到巧克力棒、巧克力糖、巧克力饮料,很多人都喜欢这样吧,叫一个人就可以迟到三种东西,可是有没有想过,他可是一家工厂,比如这个时候,又有两个孩子想吃巧克力棒和巧克力饮料,那么这个时候怎么做?这个时候,查理正在使用制作师,那就做不成生意了,不是吗?
把这个故事引申到代码上,就相当于把一个类写很多功能函数,那这个时候,就会出现这种情况,一个类如果是静态类,就是只能有一个实例化对象,他不能被同时调用;而如果可以无限构造类对象,那么会不会出现另外一个情况?查理觉得一个制作师不够,然后招了很多个懂三种的制作师,每个制作师的工资当然比懂一个的高些,那么当他工作的时候,同时只能用一种功能,那其他的不是被浪费了吗?这就表明了,我多请点懂一种的就好了,便宜很多,这就是单一职责的好处,不会被浪费、也不会被突然的占用、其使用也更加灵活,
单一职责原则简单说就是每个类、每各函数只专注于一种功能就可以了,易维护,以拓展、易复用、灵活。
- 开放-封闭原则
这个原则意思就是,一个类、一个函数对于拓展是开放的,对于修改是闭合的,就是你觉得更能不够可以添加功能、但是觉得它功能不是自己想要的,不能把它改掉。就像一个制作师他只会做巧克力棒,你对他说:我要你会做巧克力糖,他可以去学,但是你说:我要你不会做巧克力棒,会做巧克力糖,这不是坑人吗?
- 依赖倒转原则 + 里氏代换原则
里氏代换原则:子类型必须能够替代他们的父类型[ASD]。把程序类的父类替换为子类,软件无变化。
简单说就是,子类具有父类的所有功能函数,你可以进行拓展,比如
基类是鸟,其功能函数是吃、飞、睡。
而子类是大鸟、小鸟、麻雀啥的。
都具备这些功能,然后你进行使用的时候这就创建子类对象即可,你不需要操作鸟基类。
而只有这个时候,你实现了父类的重用,并且你想要啥鸟,直接替换或者派生子类就行了,而且你把鸟基类换成大鸟类,其函数功能没有变化。
依赖倒转原则:高低层无直接联系,通过抽象进行交互。抽象不依赖细节、细节月依赖抽象。这是我从《大话设计模式》抄的。
说实话,我第一次没怎么看懂,结合后面就懂了,意思就是:高层的不要调用底层的功能函数、底层的也不要直接调用高层的函数,这样修改任意一个,两边都需要改,通过第三方交互,这里就需要第三方懂得分析你需要调用的,之后调用你要调用的,想到的就是接口,都继承接口,如何调用函数就行了。那么讲到这里就知道了,细节可以说是实现,而抽象就是没实现的东西,细节依赖抽象,就是细节实现抽象函数,然后通过抽象提供的接口调用实现的细节函数。