程序员应该了解的面向对象七大设计原则

七大软件架构设计原则详解 详细讲解软件设计领域的七大软件架构设计原则 阅读详情

一:面向对象七大设计原则

  • 面向对象设计原则

    设计原则名称

    设计原则简介

    单一职责原则

    (Single Responsibility Principle, SRP)

    一个类的职责越少越好,这样引发该类修改的可能性就越小

    开闭原则

    (Open-Closed Principle, OCP)

    对扩展是开放的,但对修改是封闭的,即在不修改一个软件

     

    实体的基础上去扩展其功能,尽量通过增加代码的方式去扩展功能

    里氏替换原则

    (Liskov Substitution Principle, LSP)

    超类存在的地方,子类是可以替换的

    依赖倒置原则

    (Dependency Inversion Principle, DIP)

    实现尽量依赖与抽象或者接口,而不要依赖具体子类实现

    接口隔离原则

    (Interface Segregation Principle, ISP)

    提供尽可能小的单独接口,不要提供大的总接口

    合成聚合复用原则

    (Composite Reuse Principle, CRP)

    尽量使用组合和聚合关联关系,少使用甚至不要使用继承关系

    迪米特法则

    (Law of Demeter, LoD)

    一个软件实体对其他的引用越少越好,或者说如果两个类不彼此直接通信,

    那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互

     

    二:设计原则分析

    1.单一职责原则分析
    • 一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性越小,而且如果一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作。
    • 类的职责主要包括两个方面:数据职责和行为职责数据职责通过其属性来体现,而行为职责通过其方法来体现
    • 单一职责原则是实现高内聚、低耦合的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。
    2.开闭原则分析
    • 开闭原则是面向对象设计中最重要的原则之一。
    • 在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类
    • 抽象化是开闭原则的关键。
    • 开闭原则还可以通过一个更加具体的对可变性封装原来描述,对可变性封装原则(Principle of Encapsulation of Variation, EVP)要求找到系统的可变因素并将其封装起来
    3.里氏替换原则分析
    • 里氏替换原则可以通俗表述为:在软件中如果能够使用基类对象,那么一定能够使用其子类对象。把基类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用基类。
    • 里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象

    4.依赖倒置原则分析

    • 简单来说,依赖倒转原则就是指:代码要依赖于抽象的类,而不要依赖于具体的类要针对接口或抽象类编程,而不是针对具体类编程
    • 实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要手段。
    • 依赖倒置原则的常用实现方式之一是在代码中使用抽象类,而将具体类放在配置文件中
    • 类之间的耦合
      零耦合关系
      具体耦合关系
      抽象耦合关系
    • 依赖倒置原则要求客户端依赖于抽象耦合,以抽象方式耦合是依赖倒置原则的关键。
    • 依赖注入
      构造注入(Constructor Injection):通过构造函数注入实例变量。
      设值注入(Setter Injection):通过Setter方法注入实例变量。
      接口注入(Interface Injection):通过接口方法注入实例变量。
    5.接口隔离原则分析
    • 接口隔离原则是指使用多个专门的接口,而不使用单一的总接口。每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。
      (1)一个接口就只代表一个角色,每个角色都有它特定的一个接口,此时这个原则可以叫做角色隔离原则 
      (2)接口仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。
    • 使用接口隔离原则拆分接口时,首先必须满足单一职责原,将一组相关的操作定义在一个接口中,且在满足高内聚的前提下,接口中的方法越少越好。
    • 可以在进行系统设计时采用定制服务的方式,即为不同的客户端提供宽窄不同的接口,只提供用户需要的行为,而隐藏用户不需要的行为

    6.合成聚合复用原则分析

    • 合成聚合复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的。简言之:要尽量使用组合/聚合关系,少用继承。
    • 在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过
      继承复用:实现简单,易于扩展。破坏系统的封装性;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。(白箱复用
      组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。(黑箱复用)。
    • 组合/聚合可以使系统更加灵活,类与类之间的耦合度降低,一个类的变化对其他类造成的影响相对较少,因此一般首选使用组合/聚合来实现复用;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。

    7.迪米特法则分析

    • 简单地说,迪米特法则就是指一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易,这是对软件实体之间通信的限制,它要求限制软件实体之间通信的宽度和深度。
    • 在迪米特法则中,对于一个对象,其朋友包括以下几类:
      (1)当前对象本身(this)
      (2)以参数形式传入到当前对象方法中的对象;
      (3)当前对象的成员对象;
      (4)如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;
      (5)当前对象所创建的对象。
    • 任何一个对象,如果满足上面的条件之一,就是当前对象的朋友,否则就是陌生人
    • 迪米特法则可分为狭义法则和广义法则。狭义的迪米特法则中,如果两个类之间不必彼此直接通信那么这两个类就不应当发生直接的相互作用如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用
    • 狭义的迪米特法则:可以降低类之间的耦合,但是会在系统中增加大量的小方法并散落在系统的各个角落,它可以使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联,但是也会造成系统的不同模块之间的通信效率降低,使得系统的不同模块之间不容易协调。
    • 广义的迪米特法则:指对对象之间的信息流量、流向以及信息的影响的控制,主要是对信息隐藏的控制。信息的隐藏可以使各个子系统之间脱耦,从而允许它们独立地被开发、优化、使用和修改,同时可以促进软件的复用,由于每一个模块都不依赖于其他模块而存在,因此每一个模块都可以独立地在其他的地方使用。一个系统的规模越大,信息的隐藏就越重要,而信息隐藏的重要性也就越明显。
    • 迪米特法则的主要用途在于控制信息的过载
      在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;
      在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限
      在类的设计上,只要有可能,一个类型应当设计成不变类
      在对其他类的引用上,一个对象对其他对象的引用应当降到最低

     

CosyVoice语音合成使用教程 CosyVoice是一款开源的语音合成工具,它基于深度学习模型,能够生成高度逼真的语音内容。该工具支持多种语言的语音生成,包括中文、英文、日文、粤语和韩语。CosyVoice的亮点在于它对生成语音情感和韵律的精细控制,通过富文本或自然语言输入,可以显著提升合成语音的情感表达能力。CosyVoice提供了多种预训练模型,用户可以根据需求选择合适的模型。:基底模型,适用于一般语音合成任务。:经过SFT微调的模型,适用于特定音色和情感的语音合成。:支持Instruct微调的模型,适用于自然语言控制的语音合成。 阅读详情

相关推荐

ICC2:平行打孔create_pg_stapling_vias

power rail(follow pin)不总是metal1一成不变的,当需要使用metal2做power rail,而standard cell的pg pin仍然是metal1时就需要平行打孔,从metal2到metal1。 以往都是用create_pg_vias -allow_parallel_objects来做,但这样有两个弊端,一是需要抓出所有的via12(包括standard cell内部的和出pin绕线产生的),添加routing blockage,防止create pg via的时候产生d

m0_61544122的博客 2203

我们程序员眼中的对象-看完华华的文章妈妈再也不担心我找不到对象了-Java面向对象编程思想理解系列(1)

大家好!!!我叫霜华,是一个帅到没天理 骚里骚气,热爱人生与绿色 是一个不像程序员程序员 作为一个在java这门领域沉迷一年半的人,如今在技术栈广度和深度 还是业务能力在客观层面讲确实进步迅速 (可我就是没秃头,诶这头发咋都掉不了) (变强和头发我都要(狗头保命)) 回顾自己的学习生涯我进步迅速很大一部分原因一方面肯定是自己在学习上比较努力。其实就我个人觉得技术这东西可能真的在学习上不怎么需...

weixin_45898658的博客 771

中国湖泊矢量图.shp - (滇池)ArcGIS使用

中国湖泊矢量图.shp - (滇池)ArcGIS使用

面向对象编程3大特性 7大原则

http://blog.163.com/wumingli456@126/blog/static/28896414201211121629525/ 一、面向对象的特性 三个基本的特性:封装、继承与多态。 1、封装 面向对象编程核心思想这一就是就是将数据和对数据的操作封装在一起.通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,比如类的概念. 2、继承 继承体现了一种

hysfwjr的专栏 3524

写了这么久代码你了解Java面向对象设计原则吗?

面向对象设计原则是学习设计模式的基础,每一种设计模式都符合某一种或多种面向对象设计原则。通过在软件开发中使用这些原则,可以提高软件的可维护性和可复用性,让我们可以设计出更加灵活也更容易扩展的软件系统,实现可维护性复用的目标。

Elegance never goes out of fashion 5561

【java】面向对象七大设计原则

面向对象七大设计原则

Ez4Sterben的博客 1857

程序员必备的七大面向对象设计原则(一)

花絮         每天都在和面向对象打交道,但是我们在应用面向对象的时候感觉自己的面向对象技术应用的很合理?理解的很到位?应用的很到位?用的时候恰到好处?用的是否符合软件的发展趋势?         上面很多一连串的问题,没有把你搞晕吧!我想说的面向对象的应用也有面向对象的原则,一个程序员编程素质从一个小例子几十行代码就可以展现出来。面向对 象编程是是面向对象的基础中的基础,废话不多说,...

weixin_34310369的博客 93

程序员必备的七大面向对象设计原则

花絮         每天都在和面向对象打交道,但是我们在应用面向对象的时候感觉自己的面向对象技术应用的很合理?理解的很到位?应用的很到位?用的时候恰到好处?用的是否符合软件的发展趋势?         上面很多一连串的问题,没有把你搞晕吧!我想说的面向对象的应用也有面向对象的原则,一个程序员编程素质从一个小例子几十行代码就可以展现出来。面向对象编程是是面向对象的基础中的基础,废话不

likaiwalkman@csdn - Code Study Area 794

程序员必备知识之面向对象七大设计原则

如果我们能站在巨人的肩膀上眺望远方,为啥还要自己去艰难的翻越一座又一座的高山呢。面向对象设计原则就是前辈们在实战中给我们总结下来的宝贵经验和财富。我们可以基于这些经验,编写出很优秀的面向对象程序。在我将近5年的编程工作中,我发现,面向对象设计原则每个人好像都知道一点,每一个人好像都会点,但是写出来的代码依然是我行我素。野路子频出。很多编程不按照原则来,一股脑的瞎干,写出的程序给到后面人维护的时候,迎来的是一堆埋怨和骂声,以及无休止的一次又一次的重构,重构后发现还是和上一次代码一样的货色。

知识应该共享,创造才应收费 410

面向对象七大设计原则

目录 一、单一职责原则 1、定义 二、开闭原则 1、定义 三、依赖倒转原则 1、定义 四、里氏代换原则 1、定义 五、迪米特法则 1、定义 六、合成/聚合复用原则 1、定义 七、接口隔离原则 1、定义 ------------概念先行,后续持续更新---------- 一、单一职责原则 1、定义 单一职责原则是最简单的面...

方才coding 329

七大设计原则

文章目录一、设计模式的重要性二、设计模式的目的三、设计模式七大原则3.1、单一设计原则3.2、接口隔离原则3.3、迪米特原则3.4、依赖倒置原则3.5 、里氏替换原则3.6、开闭原则3.7、合成复用原则四、设计原则核心思想表结小结七大设计原则设计模式七大原则小总结 一、设计模式的重要性 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由 埃里希.伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的 拿

一只Java小白 896

【知识】正反例分析面向对象七大设计原则(超详细)

学习面向对象设计原则有助于提升代码的可维护性、可扩展性和可复用性。这些原则帮助开发者在设计系统时减少类与类之间的耦合、增强模块的独立性,使代码更容易适应需求变化,同时降低了修改时引入错误的风险。通过遵循这些设计原则,开发者能够编写更清晰、灵活、稳定的代码,有效应对复杂的业务场景和长期的软件维护。

Conner7的博客 860

程序员必备的七大面向对象设计原则(三)

[置顶] 程序员必备的七大面向对象设计原则(三) 分类: 软考复兴2012-05-28 07:50 5037人阅读 评论(34) 收藏 举报 五、接口隔离原则 1. 定义         i.  客户端不应该依赖那些它不需要的接口。         ii.  一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。  2.分

jfkidear的专栏 701

设计模式-01.面向对象七大设计原则

面向对象七大设计原则 概述 软件的可维护性和可复用性软件的复用(Reuse)或重用拥有众多优点,如可以提高软件的开发效率,提高软件质量,节约开发成本,恰当的复用还可以改善系统的可维护性。 面向对象设计复用的目标在于实现支持可维护性的复用。 在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。 面向对象设计原则和设计模式也是对系统进行合理重构的指南针,重构(Refactoring)是在不改变

Liongz的博客 387

设计模式之七大设计原则

目录(一) 设计模式(二) 设计模式的七大设计原则1.单一职责原则2. 接口隔离原则 (一) 设计模式 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的: 代码重用性: 相同功能的代码, 不用多次编写 代码可读性: 编程规范性, 代码便于阅读、理解 代码的可扩展性: 当需要增加新的功能时, 易于扩展, 可维护性高 代码的可靠性: 当需要增加新的功能时, 对原有的功能没有影响 使程序呈现高内聚, 低耦合的特性

Admin_Lian的博客 465

零——七大设计原则

本文讲解了七大设计原则,并对其中的一些原则进行举例说明。

qq_61350148的博客 1005
上一篇: 使用简单工厂模式,解析XML文件,并将数据显示在treeview上
下一篇: UML类图
HideLin
博客等级 码龄15年 6粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值