首页 > 其他分享 >设计原则&模式:六大设计原则

设计原则&模式:六大设计原则

时间:2024-02-29 17:11:33浏览次数:18  
标签:六大 定义 原则 子类 接口 设计 父类 方法

 

单一职责原则(SRP:Single Reposibility Principle)

定义:一个类或者模块只负责完成一个职责。

 

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

定义:所有使用父类的地方可以使用子类的对象,子类可以扩展父类的功能,但是不能替换父类的功能。如果需要替换父类功能,建议——多用组合,少用继承。

含义:

1、里氏替换原则是针对继承而言的,如果继承是为了实现代码重用,也就是为了共享方法,那么共享的父类方法就应该保持不变,不能被子类重新定义。子类只能通过新添加方法来扩展功能,父类和子类都可以实例化,而子类继承的方法和父类是一样的,父类调用方法的地方,子类也可以调用同一个继承得来的,逻辑和父类一致的方法,这时用子类对象将父类对象替换掉时,当然逻辑一致,相安无事。

2、如果继承的目的是为了多态,而多态的前提就是子类覆盖并重新定义父类的方法,为了符合LSP,我们应该将父类定义为抽象类,并定义抽象方法,让子类重新定义这些方法,当不存在子类替换父类实例(根本不存在父类实例了)时逻辑不一致的可能。

 

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

定义:下层模块引入上层模块的依赖,改变原有自上而下的依赖方向。

 

接口隔离原则

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

含义:

1、接口要尽量小

  • 不要违反单一职责原则。
  • 要适度的小,要适度。

2、接口要高内聚

  • 提高接口、类、模块的处理能力,减少对外的交互。

3、定制服务

  • 通过对高质量接口的组装,实现服务的定制化。

 

迪米特法则/最少知识原则(LoD:Law of Demeter)

一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂,那是你的事儿,和我没关系,我就知道你提供的这么多pulic方法,我就调用这么多,其他的我一概不关系。

 

开闭原则

定义:类、方法、模块应该对扩展开放,对修改关闭。

含义:添加一个功能应该是在已有的代码基础上进行扩展,而不是修改已有的代码。

 

 

END

标签:六大,定义,原则,子类,接口,设计,父类,方法
From: https://www.cnblogs.com/houhuilinblogs/p/18044811

相关文章

  • 设计原则 (6) 迪米特法则
    简介迪米特法则(LawofDemeter,LoD),也称为最少知识原则(PrincipleofLeastKnowledge),是面向对象设计中的一个重要原则。它强调了一个对象应该对其他对象有尽可能少的了解,也就是说,一个对象不应该直接与其它对象进行过多的交互。简而言之,一个对象应该对其他对象保持最少的了解。主要......
  • 设计原则 (5) 依赖倒置原则
    简介依赖倒置原则(DependencyInversionPrinciple,DIP)是面向对象设计中的一个重要原则,它强调了高层模块不应该依赖于低层模块,二者都应该依赖于抽象;而且抽象不应该依赖于具体实现细节,具体实现细节应该依赖于抽象。简而言之,高层模块和低层模块都应该依赖于抽象,而不是依赖于具体的实......
  • 设计原则 (3) 里氏替换原则
    简介里氏替换原则(LiskovSubstitutionPrinciple,LSP)是面向对象设计中的一个重要原则,由芭芭拉·利斯科夫(BarbaraLiskov)在1987年提出。它是继承原则的一种深化和发展,强调子类必须能够替换掉父类并且不影响程序的正确性。里氏替换原则的定义为:“如果对每一个类型为S的对象o1,都......
  • 架构设计中的概念明确性与统一性:构建稳健系统的双重保障
    架构设计中的概念明确性与统一性:构建稳健系统的双重保障在软件架构的设计过程中,明确的概念定义和统一的概念理解是确保系统质量和团队协作的关键。它们共同构成了构建稳健系统的双重保障,对于项目的成功至关重要。一、明确概念:架构设计的基石明确的概念定义是软件架构设计的基础......
  • java程序设计 - 第二次实验
    【实验目的】继续熟悉Eclipse的使用并尝试编写一个简单的Applet程序【实验过程】编写一个JavaApplet程序,并正在JavaApplet中写两行文字:“这是一个JavaApplet程序”和“我改变了字体”。importjava.applet.*;importjava.awt.*;publicclassJavaAppletextendsApplet......
  • 解放设计师的创造力:免版的图片素材
    在设计领域,设计师常常需要使用图片素材来增加作品的视觉效果。然而,传统的图片素材往往受到版权的限制,设计师不能自由地使用这些素材。免版素材库|一个覆盖广泛主题工具的高效在线平台(amd794.com)https://amd794.com/materialLibrary免版的图片素材解决了什么问题免版......
  • 实战上,通过一段ID 生成器代码,学习如何发现,代码质量的问题(设计模式)
    ID生成器的需求背景介绍ID中文翻译为标识Identifier,这个概念在生活,工作中随处可见,比如身份证、商业条形码、二维码、车牌号、驾照号。聚焦到软件开发中,ID常用来标识一些业务信息的唯一标识,比如订单的单号或者数据库中的唯一主键,比如地址中ID字段(实际上时没有业务含义的,对用......
  • 《实现领域驱动设计》- 模块
    通过模块完成设计在DDD中,模型中的模块表示了一个命名的容器,用于存放领域中内聚在一起的类。将类放在不同模块中的目的在于达到松耦合性。在DDD中的模块并不是一个通用的存储区域,因此对其进行适当的命名是重要的。事实上,模块名是通用语言的重要组成部分。在设计模块......
  • 自由生成各种尺寸大小的占位图片:解决设计与开发中的图片占位问题
    在设计与开发的过程中,经常需要使用占位图片来填充暂时没有真实图片的位置。传统的占位图片往往只提供固定尺寸的模板,无法满足不同尺寸的需求。为了解决这一问题,自由生成各种尺寸大小的占位图片的工具应运而生。占位图片|一个覆盖广泛主题工具的高效在线平台(amd794.com)......
  • 23种设计模式 - 单例模式
      饿汉式特点:线程安全,调用效率高,但是不能延时加载publicclassSingletonDemo01{privatestaticSingletonDemo1instance=newSingletonDemo1();privateSingletonDemo1(){}publicstaticSingletonDemo1getInstance(){returninstance;}......