JAVA基础——面向对象设计原则 类的设计原则

面向对象设计原则


本文部分内容来源《模式工程化实现及扩展》 (设计模式JAVA版) 电子工业出版社

一、类的设计原则

1.单一职责原则(SRP)

每个类只担任一个职责,每个类应只有一个引起它变化的原因。
一个类只负责一项职责,应该仅有一个引起它变化的原则

2.里氏替换原则(LSP)和依赖倒置原则(DIP)

子类可以扩展父类的功能,但不能改变父类原有的功能
1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2. 子类中可以增加自己特有的方法。
3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

3.依赖倒置原则(DIP)

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程
依赖倒置原则的中心思想是面向接口编程,传递依赖关系有三种方式,以上的说的是是接口传递,另外还有两种传递方式:构造方法传递和setter方法传递。
1. 低层模块尽量都要有抽象类或接口,或者两者都有。
2. 变量的声明类型尽量是抽象类或接口。
3. 使用继承时遵循里氏替换原则。

4.接口隔离原则(ISP)

建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

5.开闭原则(OCP)

开闭原则要求软件有一个良好的基本结构,确保面对“变化”的时候,仅仅扩展而不是修改现有对象的组织框架就可以随需而动。
抽象化是关键,定义抽象类或接口,使其可以有很多的具体实现预见所有的需要,在任何情况下都不再修改上层商业逻辑。

抽象类的用法:
1. 抽象类应当拥有尽可能多的共同代码
2. 在一个抽象类到多个具体类的继承关系中,共同的代码应当尽量移动到抽象类中,这样可以提高代码利用率。当需要修改这些共同的代码时,设计师只需要修改一个地方。
3. 抽象类应当拥有尽可能少的数据
4. 与代码移动方向相反,数据的移动方向是从抽象类到具体类,一个数据对象无论是否使用都会占用资源,因此数据应当尽量放到具体类或等级结构的低端。

接口
1. JAVA接口是一些方法特征的集合,接口中只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被实现并且具有完全不同的行为。当然,JAVA还允许在接口中定义常量。
2. JAVA接口中的方法只能是abstract和public,接口中不能有构造器,可以有public、static和final属性。
3. 接口将方法的特征和方法的实现分割开来,这种分割体现在接口常常代表一种角色,它封装与该角色相关的操作和属性,而实现这个接口的类就是扮演这个角色的演员。
4. 一个接口可以被多个类实现,一个类可以实现多个接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值