一个人至少拥有一个梦想,有一个理由去坚强

心若没有栖息的地方,到哪里都是在流浪

面向对象设计的基本原则

一、单一职责原则(Single Responsibility Principle, SRP):

一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因,这样设计的好处是可以实现“高内聚,低耦合”,方便后期代码的维护。

二、开放封闭原则(Open-Closed Principle, OCP):

一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

需要对系统进行抽象化设计,抽象化是开闭原则的关键

三、里氏替换原则(Liskov Substitution Principle, LSP)

所有引用基类(父类)的地方必须能透明地使用其子类的对象,

里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

四、依赖倒转原则(Dependency Inversion Principle, DIP)

抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程,DIP是面向对象设计的主要实现机制之一。

依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增加的新方法。

在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入(DependencyInjection, DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。

五、接口隔离原则(Interface Segregation Principle, ISP)

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口

这个原则其实说明的意思是单个接口的粒度范围要合适,不能太大也不能太小,

六、合成复用原则(Composite Reuse Principle, CRP)

量使用对象组合,而不是继承来达到复用的目的

合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承

一般而言,两个类之间如果是IS—A 关系就应该用继承,HAS-A的关系就应该用组合或者聚合

七、迪米特法则(Law of Demeter, LoD)

一个软件实体应当尽可能少地与其他实体发生相互作用

小结:今天暂时先写这么多吧,毕竟自己对这些准则的运用也不是很熟练,等以后有了新理解再更新。

这些原则从表面是很容易去理解,但是实际用起来还是很多的人不知道为什么要那样用,常常需要经常去理解这些原则,并且和自己的代码实际结合起来会更好。

 

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注