面向对象设计的七大基本原则

面向对象设计的七大基本原则

1、开闭原则(Open Closed Principle,OCP)
2、单一职责原则(Single Responsibility Principle,SRP)
3、里氏替换原则(Liskov Substitution Principle,LSP)
4、依赖倒置原则(Dependence Inversion Principle,DIP)
5、接口隔离原则(Interface Segregation Principle,ISP)
6、迪米特法则(Law of Demeter,LoD)
7、合成复用原则(Composite Reuse Principle,CRP)

一、开闭原则

定义:一个软件实体如类、模块和函数对扩展开放,对修改关闭。

我们一般用抽象构建框架,用实现扩展细节。这也就可以提高软件系统的可重复性及可维护性。

例如:我们每天工作8小时,对每天工作8小时这个制度修改是关闭的,但是对于什么时候来,什么时候走这个制度是开放的,早点来早点走,晚点来晚点走,前提是干满8个小时的工作。

public interface IReader {
	public String getContent();
}
public class Book implements IReader{

	@Override
	public String getContent() {
		// TODO Auto-generated method stub
		return "很久很久以前有个孙悟空";
	}
}
public class Newspaper implements IReader {
	public String getContent() {
		return "中国最强";
	}
}
public class Mother {
	public void narrate(IReader reader) {
		System.out.println(reader.getContent());
	}
}
public class Client {
	public static void main(String[] args) {
		Mother mother=new Mother();
		mother.narrate(new Book());
		mother.narrate(new Newspaper());
	}
}

二、单一职责原则

定义:不要存在多于一个导致类变更的原因,也就是每个类应该实现单一的职责,如若不然,就应该把类拆分。

也就是说每一个对象或类只做一件事情,是代码高内聚,低耦合

优点:好管理,结构简单,不受其它功能的影响,将对象解耦,提高可用性,降低变更风险。

例如:公司各个部门各司其职,每个问题都有专门的部门负责。

三、里氏替换原则

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

在软件中将基类对象替换成它的子类对象,程序将不会产生任何错误和异常;反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能使用基类对象

例如:我喜欢猫,不代表我喜欢动物,因为我不喜欢老鼠。我喜欢动物,那么我一定喜欢猫,因为猫属于动物。

四、依赖倒置原则

定义:是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。

抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和维护性,并且能降低修改程序所造成的风险。

依赖的三种写法:1.构造函数传递1依赖对象。2.Setter方法传递依赖对象。3.接口声明依赖对象。

五、接口隔离原则

定义:其一是不应该强行要求客户端依赖于它们不用的接口;其二是类之间的依赖应该建立在最小的接口上面。简单点说,客户端需要什么功能,就提供什么接口,对于客户端不需要的接口不应该强行要求其依赖;类之间的依赖应该建立在最小的接口上,这里最小的粒度取决于的那一职责原则的划分。

六、迪米特法则

定义:从狭义来说迪米特法则也叫最少知识原则。如果两个类不彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法发话,可以通过第三者转发这个调用。
从广义来说,一个模块设计的好坏的一个重要的标志就是改模块在多大的程度上将自己的内部数据与实现有关的细节隐藏起来。信息的隐藏非常重要的原因在于,它可以使各个子系统之间脱耦,从而允许它们独立地被开发、优化、使用阅读以及修改。

例如:你想让你的员工制作一批产品,你是对机器说还是对你的员工说?

七、合成复用原则

定义:尽量使用对象组合,而不是继承来达到复用的目的。也叫:组合/聚合复用原则。

要尽量使用合成-聚合,尽量避免继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前路茫茫——何处无香

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

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

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

打赏作者

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

抵扣说明:

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

余额充值