以下文章大部分出于 可以自行阅读 而且都要阅读
围观设计模式–作者自己的感悟
开闭原则
修改关闭 扩展开放 我一直以为是抽象类写的好 然后实现类扩展 原来是不可以新增功能就对抽象类进行修改的 可以新写一个类继承当前的抽象类 然后在里面新增功能
里氏替换原则
在继承关系中,父类的对象如果替换为子类的对象,他原来执行的行为依然保持不变,那么这样的程序才符合里氏替换原则,否则违背了里氏替换原则。
里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
在实际编程中,我们常会通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的几率非常大。
根据LSP,我们把基类替换成它的子类,结果应该也是一样的,也就是说,替换成子类后,程序的行为发生了变化,它不满足LSP。
可以重写父类 但是标准是父类和子类可以透明转换 比如正方形 长方形那个例子 正方形子类重写了父类的方法 但是在后来的函数调用种 父类替换成子类会因为他重写的方法而无法子类父类透明转换
所以应该尽量避免重写父类 虽然这很方便 只要显明的调用子类的方法即可 但是不知道代码之后会扩展成什么样 也许也会遇到正方形那种需求 这时候就要修改子类重写的代码 违反开闭原则 所以尽量不要重写
如果非要重写父类的方法,比较通用的做法是:原来的父类和子类都继承一个更通俗的基类,原来的继承关系去掉,采用依赖、聚合、组合等关系替代。(非要重写只能删除关系了。。)
3—点击阅读里氏替换原则
小鸟例子 也说明子类重写父类函数 在之后新增功能时 却无法完成子类和父类的透明转换 即子类小鸟无法像父类一样适用新增的功能 所以不要重写 如果非要重写那就继承更大的类
依赖倒置原则
文章解释了高层模块 不要耦合低层模块 而是在中间加一层抽象类 大家都依赖于抽象
依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性
其核心思想是:要面向接口编程,不要面向实现编程。
- 不要总写具体类的派生类 大家都应该依赖抽象
总结 :依赖让尽量使用接口/抽象类 加上里氏原则的劝告不要使用具体类的派生类 不要使用子类的重写 那就尽量不要写extends 多写implements - 在开发的时候尽量先写出接口 然后先列出功能
以下不再引用文章链接 直接去本文最上面的链接中寻找对应文章
单一职责原则
我发现这些和重构很像 临时变量要单一责任
接口隔离原则
概括地讲,面向对象设计原则仍然是面向对象思想的体现。例如,单一职责原则与接口隔离原则体现了封装的思想,开放封闭原则体现了对象的封装与多态,而Liskov替换原则是对对象继承的规范,至于依赖倒置原则,则是多态与抽象思想的体现。在充分理解面向对象思想的基础上,掌握基本的设计原则,并能够在项目设计中灵活运用这些原则,就能够改善我们的设计,尤其能够保证可重用性、可维护性与可扩展性等系统的质量属性