面向对象设计的六大原则

1、单一职责原则(Single Responsibility Principle)

“一个类只做一件事,引起它变化的原因只有一个。”

一个接口只做一件事情。

尽量避免修改一个功能时,影响太多其他的东西,这个原则的划分细粒度是一个难点,只能通过工作经验的积累才能更好的应用。

1、定义:应该有且只有一个原因引起类的变更。换句话说就是一个接口只做一件事,即一个职责一个接口。但是困难的是划分职责时并没有一个标准,最终都是需要从实际的项目去考虑。

注意,在设计时,尽量职责单一,对于其实现类就要多方面的考虑。不能死套单一职责原则,否则会增加很多类,给维护带来不便。

2、开闭原则(Open Closed Principle )

对修改关闭,对扩展开放。提供良好的可扩展性和易维护性。

1、定义:开闭原则是Java里最基础的设计原则。具体的定义是:一个软件实体,比如类,模块,函数应该对扩展开放,对修改关闭。一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现改变。

3、里氏代换原则(Liskov Substitution Principle )

即子类可以代替父类的全部功能,反过来就不行。

1、 定义:里氏替换原则----只要父类出现的地方子类就可以出现,且替换成子类也不会出现任何错误或者异常。(但是反过来,有子类出现的地方,父类不一定可以适用)

2、里氏替换原则是为继承定义了四个规范

(1) 子类必须完全实现父类的方法;
(2) 子类可以有自己的个性;
(3) 覆盖或者实现父类的方法时输入参数可以被放大 ( 重载而非重写 )
(4) 复写或实现父类的方法时返回值可以缩小。

4、依赖倒转原则(Dependence Inversion Principle)

即高层代码不应该依赖于底层代码,而应该依赖于接口,即面向接口编程。在Java语言中的表现就是为以下的三点:

      (1)模块间的依赖关系通过接口和抽象类产生,实体类之间不直接发生依赖关系;

      (2)接口和抽象类不依赖于实现类;

      (3)实现类依赖接口或者抽象类;

对象的依赖关系有三种实现方式

     (1)构造函数传递依赖对象;

    (2)Setter接口传递依赖对象;

    (3)接口声明依赖对象,也叫接口注入;

注,构造函数传递方式与接口注入方式的区别

5、迪米特法则(Law of Demeter)

1、定义:迪米特法则也叫做最少知识原则(Least Knowledge Principle,LKP),即一个对象应该对其他对象有最少的了解,也就是说一个类要对自己需要耦合或者调用的类知道的最少。我只知道你有多少public方法可以供我调用,而其他的一切都与我无关。

2、迪米特法则是对类的低耦合做处理明确的要求。例如:学校领导老师点名,老师让体育委员清点人数。其中第二段代码的耦合性较第一段代码有所改善。

3、迪米特法则的核心观念就是类间解耦,最终可能产生的结果就是会产生了大量的中转类。为了把解耦做到极致导致实现一个业务逻辑的实现跳转了很多类,这也是不可取的做法。因此根据实际权衡利弊才是重要的。

6、接口隔离原则(Interface Segregation Principle)

1、定义:建立单一接口,不要建立臃肿庞大的接口。即接口尽量细化,同时接口中的方法尽量少。

在这里提一下单一职责接口隔离原则的区别。首先两个侧重点是不一样的,单一职责要求类和接口,或者方法的职责单一,侧重点在职责,这是根据业务逻辑进行划分的。而接口隔离原则要接口中的方法尽量少。比如,一个接口或者一个中有十个方法,不同的方法做不同的事情,但是这个接口总体就是处理一件事情,然后具体细分成了10个方法。不同的模块根据不同的权限进行访问,这是符单一职责原则的。但是按照接口隔离的原则是要求接口中的方法尽量少,落实到这个实例就是要求尽量多几个专门的接口供不同的模块使用,而不是只有一个臃肿的接口,依据权限去限制不同模块可以访问的方法。

2、接口隔离原则是对接口定义的规范。

含义主要包含以下4点:

接口尽量小,根据具体业务把一个接口按照接口隔离原则细化成更多的接口。但是在此基础之上必须不能违背单一职责原则。

接口要高内聚。高内聚的意思就是提高接口和类处理能力,减少对外的交互。接口是对外的承诺,因此设计时应该尽量少公布接口中的public方法,承诺越少系统开发越有利且变更风险就越少。

定制服务。定制服务就是单独为一个个体提供服务,即只提供访问者需要的方法。

接口设计是有限度的。接口设计越小越好,但是结构同时会变得复杂,维护也变得难了。因此就要把握住这个度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值