【设计模式之禅】之 六大设计原则

一、单一职责原则(Single Responsibility Principle 简称SRP)

    原定义:There should never be more than one reason for a class to change.

    既是:应该有且只有一个原因引起类的变更.

    单一职责的好处:

    1、类的复杂性降低,实现什么职责都有清晰明确的定义;

    2、可读性提高了,复杂性降低了,可读性自然也就提高了;

    3、可维护性提高了,可读性提高了,那当然可读性就提高了;

    4、变更引起的风险降低,变更是必不可少的,如果一个接口的单一职责做的好,一个接口的修改只对相应的实现类有影响,对其他接口无影响,这对系统的扩展性、维护性都有很大的帮助

二、里氏替换原则(Liskov Substitution Principle LSP)

   定义一:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged where o1 is subsitituted for o2 then S is a subtype of T(如果对应类型为S的对象o1,的哦有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型 S是类型T的子类型)

   定义二:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it(所有引用基类的地方都必须能够透明的使用其子类的对象)

   通俗点讲:只要父类能够出现的地方子类都能够出现,而且替换为子类也不会产生任何异常或错误,使用者根本就不需要知道是父类还是子类。但是,反过来就不戏行了。子类出现的地方,父类就不一定能够适应。

   里氏替换原则包含的4层含义:

   1、子类必须完全实现父类的方法;

   2、子类可以有自己的特性;

  3、覆写或者实现父类的方法时输入的参数可以被放大;

   4、覆写或者实现父类的方法时输出的结果可以被缩小;

三、依赖倒置原则(Dependence Inversion Principle DIP)

   原定义:High level modules not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstactions.

  既是:

  1、高层模块不应该依赖底层模块,两者都应该依赖其抽象;

  2、抽象不应该依赖细节;

  3、细节应该依赖抽象;

该原则在java中的表现就是:

  1、模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的;

  2、接口或抽象类不依赖于实现类;

  3、实现类依赖接口或抽象类;

  更加精简的定义就是“面向接口编程“————OOD(Object-Oriented Design,面向对象设计)

依赖倒置原则的本质就是通过抽象(抽象类或者接口)使各个类或模块的实现彼此独立,不互相影响,实现模块见的松耦合,如果需要使用该规则,需要遵循以下几个规则:

  1、每个类尽量都有接口或者抽象类,或者抽象类和接口两者都具备(这个是该原则的基本要求,接口和抽象类都是抽象,有了抽象才可能依赖倒置);

  2、变量的表面类型尽量是接口或者抽象类;

  3、任何类都不应该从具体类派生;

  4、尽量不要覆写基类的方法(如果基类是一个抽象类,并且该方法已经实现了,子类尽量不要覆写。类间依赖的是抽象,覆写了抽象方法,对依赖的稳定性会产生一定的影响);

  5、结合里氏替换法使用;

四、接口隔离原则

接口隔离原则的含义:

   1、接口要尽量小(核心定义);

   2、接口要高内聚;

    高内聚就是提高接口、类、模块的出来能力,减少对外的交互。

   3、定制服务;

    定制服务就是单独为一个个体提供优良的服务。

   4、接口设计是有限度的;

五、迪米特法则(Law of Demeter LOD)也称最少知识原则(Least knowledge Principle LKP)

定义:一个对象应该对其他对象有最少的了解。

通俗的讲就是一个类应该对自己需要耦合或者调用的类知道的越少越好。

六、开闭原则

定义:Software entities like classes,modules and functions should be open for extension but closed for modifications

既是:一个软件实体如类,模块和函数应该对扩增开放,对修改关闭。(软件实体应该通过扩展(集成类,实现接口)来实现变化,而不是通过修改已有代码来实现改变)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值