面相对象编程的七大设计原则(又干又硬的货,牙口不好注意被崩坏哟~)

一、设计原则的作用

    1、如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的
    核心问题之一;
    2、面向对象设计原则为支持可维护性、可复用而诞生,这些原则蕴含在很多设计
    模式中,它们是从许多设计方案中总结出的指导性原则。

    3、在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理
    解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,
    因此需要慎重使用继承复用。(通过继承来进行复用的主要问题在于继承复用会破坏
    系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常
    对子类来说是可见的,所以这种复用又称“白箱”复用,如果基类发生改变,那么子类
    的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改
    变,没有足够的灵活性;而且继承只能在有限的环境中使用(如类没有声明为不能被
    继承));

二、七大设计原则

1.单一原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责
理解说明:
		1、就一个类而言,应该只有一个引起它变化的原因;(如:负责连接数据库的类,负责操作数据库中表的类包
		括增删改查等方法,如:负责图表的生成和显示的类)
		2、单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则。
2.开闭原则(Open-Closed Principle, OCP):软件实体应对扩展开放,而对修改关闭(面向对象的设计的目标)
理解说明:
			1、软件实体应尽量在不修改原有代码的情况下进行扩展;
			2、为了满足开闭原则,需要对系统进行抽象化(定义接口、抽象类)设计,抽象化是开闭原则的关键(例如:
			很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进
			行扩展)
3.里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类对象的地方能够透明地使用其子类的对象
理解说明
			1、子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。(比如接口,抽象类)根据
			里氏代换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存在子类中,在
			父类中不提供相应的声明,则无法在以父类定义的对象中使用该方法。

			 2、 我们在运用里氏代换原则时,尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实
			 现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修
			 改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。里氏代换原则是开闭原则的具体实现
			 手段之一。
4.依赖倒转原则(Dependence Inversion Principle, DIP):抽象不应该依赖于细节(实施过程),细节应该依赖于抽象(面向对象设计的主要实现机制之一)
理解说明:
		1、要针对接口编程,而不是针对实现编程。
 			在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入(DependencyInjection, DI)
 		的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的
 		对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。
5.接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口
理解说明:
		1.使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。每一个接口应该承
		担一种相对独立的角色,不干不该干的事,该干的事都要干。

		2、在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,
		不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便
6.合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合(依赖注入等方式),而不是继承来达到复用的目的
理解说明:
		1、在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的
		一部分;
		2.复用时要尽量使用组合/聚合关系(关联关系),少用继承(继承层级过多会验证影响系统性能,俗称继承
		爆炸)。
		3、一般而言,如果两个类之间是“Has-A”的关系应使用组合或聚合,如果是“Is-A”关系可使用继承。"Is-A"是严
		格的分类学意义上的定义,意思是一个类是另一个类的"一种";而"Has-A"则不同,它表示某一个角色具有某一
		项责任。
7.迪米特法则(又称之为最少知识原则)(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用
理解说明:
			1、应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任
			何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个
			调用;

			2、迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值