在没有了解到面向对象设计的7大原则前,我只是一只豆子! 但豆子终将会成长不是吗?
1.开闭原则:一个软件实体应当对扩展开放,对修改关闭。也就是说在所涉及一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。
在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个读库的类。
抽象化是开闭原则的关键。
是添加新代码完成方法的重构 而不是修改源代码
声明: 本文源自
2.依赖倒转原则:高层模块不应该依赖低层模块,他们都应依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
要针对接口编程,不要针对实现编程。
代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。
实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对
象设计的主要手段。
依赖倒转原则的常用实现方式之一是在代码中使用抽象类。而将具体类放在配置文件中。
依赖注入:构造注入:通过构造函数注入实例变量 设值注入:通过Setter方法注入视力变量 接口注入:通过接口方法注入实例变量
3.里氏替换原则: 子类出现在父类出现的位置,且不影响程序的运行。但是反过来就是父类对象是不能替换子类对象的。
有了里氏替换原则,才使继承复用成为可能,
子类可以在父类的基础上添加新的行为。(子类要比父类优秀)
子类型必须能替换掉他的父类型。
Pass :了解更多
4.单一职责原则:一个对象应该只包含单一的职责,且该职责要被封装在具体的一个类中。
即一个类只做单一的事,避免繁杂类的出现,使得类的继承和重载更加的方便。
耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送
数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时
表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。
Pass :了解更多
5.接口隔离原则:客户端不应该依赖于那些他不需要的接口。
在使用接口的时候,为客户端提供指定的接口大小,按需分配,隐藏客户端不需要的接口。
接口隔离原则是指:不使用单一的总接口,每一个接口应承担相对独立的角色。
类应完全依赖相应的专门的接口。
Pass: 了解更多
6.合成复用原则 :尽量使用对象组合,而不是使用继承来达到复用的目的。
一般来说使用继承的时候,要严格遵守里氏替换原则,基类的细节对于子类是可见的,这种方式属于静态的,
减少了程序的灵活性,如果基类发生改变,其子类也不得不随之变动。
一般来说首先使用"组合/聚合" 降低类于类之间耦合度,减少类的变化对其他类的影响。
合成复用原则 :就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。
Pass 了解更多
7.迪米特法则:一个软件实体尽可能少的和其他软件实体发生相互作用。
减少对象与对象之间的直接交互,创建中间类, 通过中间类进行对象与对象间的间接交互,
当我们需要增加或删除空间的时候,就只需在中间类中进行调整,无需修改已有控件的源代码。
降低程序之间的耦合度,使类于类之间呈现松散的耦合关系。程序更加的灵活。