JAVA面向对象设计原则(1)
1、单一职责原则
对类来说,就是一个类应该只负责一项职责,这就是单一职责原则。对类来说,就是一个类应该只负责一项职责,这就是单一职责原则。核心思想:应该有且仅有一个原因引起类的变更。好处:类的复杂度降低、可读性提高、可维护性提高、扩展性提高、降低了变更引起的风险。需注意:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可以度量的,因项目和环境而异。
2、开闭原则
开闭原则的英文是 Open Closed Principle,缩写为 OCP。开闭原则说的是:软件实体(模块、类、函数等等)应该对扩展是开放的,对修改是关闭的。对扩展是开放的,意味着软件实体的行为是可扩展的,当需求变更的时候,可以对模块进行扩展,使其满足需求变更的要求。对修改是关闭的,意味着当对软件实体进行扩展的时候,不需要改动当前的软件实体;不需要修改代码;对于已经完成的类文件不需要重新编辑;对于已经编译打包好的模块,不需要再重新编译。两者结合起来表述为:添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。最简单的就是利用抽象类,将方法定义为抽象方法,然后在后代中重写方法,来进行单继承多实现。
3、接口隔离原则
接口对于Java开发者来说都不陌生,它几乎存在于每一个Java程序中,是抽象的代名词。在讲接口隔离原则之前,先说说接口,接口分为以下两种:
实例接口(Object Interface)在 Java 中声明一个类,然后用 new 关键字产生一个实例,是对一个类型的事物的描述,这就是一种接口。或许我们乍一看会有点懵,怎么和我们原来学习的接口不一样呢,其实我们这样想,我们都知道,在 Java 中有一个 Class 类,表示正在运行的类和接口,换句话说每一个正在运行时的类或接口都是 Class 类的对象,这是一种向上的抽象。接口是一种更为抽象的定义,类是一类相同事物的描述集合,那为什么不可以抽象为一个接口呢?
类接口(Class Interface)这就是我们经常使用的用 interface 定义的接口\n这里插一句,接口隔离原则中所说的接口并不是狭意的在 Java 中用 interface 定义的接口,而是一种更为宽泛的概念,可以是接口,抽象类或者实体类。
接口隔离原则是指使用多个专门的接口,而不使用单一的总接口。每一个接口应该承担一种相对独立角色,不多不少,不干不该干的事,该干的事都要干。1.一个接口就只代表一个角色,每个角色都有它特定的一个接口,此时这个原则可以叫做“角色隔离原则”。2.接口仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。3.使用接口隔离原则拆分接口时,首先必须满足单一职责原则,将一组相关的操作定义在一个接口中,且在满足高内聚的前提下,接口中的方法越少越好。4.可以在进行系统设计时采用定制服务的方式,即为不同的客户端提供宽窄不同的接口,只提供用户需要的行为,而隐藏用户不需要的行为。
4、里氏替换原则
里氏替换原则:**所有引用基类(父类)的地方必须能透明地使用其子类的对象。也就是说子类可以扩展父类的功能,但不能改变父类原有功能。\n\n透明使用的关键就是,子类不能改变父类原有功能。里氏替换原则由 Barbara Liskov 提出,这个原则很明显,Java 的多态或者 C++ 的虚函数本身就允许把指向基类的指针或引用,在调用其方法或函数的时候,调用实际类型的方法或函数。里氏替换原则的内容可以描述为: “派生类(子类)对象可以在程式中代替其基类(超类)对象。优点\:提高代码的重用性,子类拥有父类的方法和属性。提高代码的可扩展性,子类可形似于父类,但异于父类,保留自我的特性。缺点:(侵入性、不够灵活、高耦合)继承是侵入性的,只要继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性。增加了耦合,当父类的常量、变量或者方法被修改了,需要考虑子类的修改,所以一旦父类有了变动,很可能会造成非常糟糕的结果,要重构大量的代码。
参考于:【Java设计模式--------面向对象七大设计原则 - CSDN App】http://t.csdnimg.cn/Nbjfs