You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

它会违反SOLID原则吗?

在给出示例代码之前,我们先了解一下SOLID原则是什么。

SOLID是面向对象设计的五个基本原则的缩写,分别是:

  1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因。
  2. 开放封闭原则(Open-Closed Principle,OCP):一个实体应该是可扩展的,而不可修改的。
  3. 里氏替换原则(Liskov Substitution Principle,LSP):子类必须能够替换它们的父类。
  4. 接口隔离原则(Interface Segregation Principle,ISP):使用多个专门的接口,而不是使用单一的总接口。
  5. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

下面是一个示例代码,来演示违反了SOLID原则中的哪些原则:

public class Rectangle {
    private int width;
    private int height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    public int getWidth() {
        return width;
    }
    
    public void setWidth(int width) {
        this.width = width;
    }
    
    public int getHeight() {
        return height;
    }
    
    public void setHeight(int height) {
        this.height = height;
    }
    
    public int getArea() {
        return width * height;
    }
}

public class Square extends Rectangle {
    public Square(int sideLength) {
        super(sideLength, sideLength);
    }
    
    @Override
    public void setWidth(int width) {
        super.setWidth(width);
        super.setHeight(width);
    }
    
    @Override
    public void setHeight(int height) {
        super.setWidth(height);
        super.setHeight(height);
    }
}

上面的示例代码违反了里氏替换原则(LSP)和开放封闭原则(OCP)。Square类继承自Rectangle类,但是重写了setWidth()和setHeight()方法,改变了原本的行为。这导致在使用Square对象时,无法将其视为Rectangle对象来使用,因为它们的行为不一致。这违反了LSP原则。同时,如果需要添加另一种形状,比如Circle,就需要修改Rectangle类的代码来添加新的方法,这违反了OCP原则。

为了遵循SOLID原则,可以将代码改造如下:

public interface Shape {
    int getArea();
}

public class Rectangle implements Shape {
    private int width;
    private int height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    public int getWidth() {
        return width;
    }
    
    public void setWidth(int width) {
        this.width = width;
    }
    
    public int getHeight() {
        return height;
    }
    
    public void setHeight(int height) {
        this.height = height;
    }
    
    public int getArea() {
        return width * height;
    }
}

public class Square implements Shape {
    private int sideLength;
    
    public Square(int sideLength) {
        this.sideLength = sideLength;
    }
    
    public int getSideLength() {
        return sideLength;
    }
    
    public void setSideLength(int sideLength) {
        this.sideLength = sideLength;
    }
    
    public int getArea() {
        return sideLength * sideLength;
    }
}

上面的代码使用接口Shape来抽象形状的概念,并分别实现Rectangle和Square类来表示具体的形状。每个类都实现了getArea()方法来计算形状的面积。这样,每个对象都可以被视为Shape对象来使用,符合LSP原则。同时,如果需要添加新的形状,只需要实现Shape接口即可,不需要修改已有的代码,符合OCP原则。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

关于Python中的SOLID原则设计

Python是近年来非常流行的面向对象编程语言,它非常适合快速开发和生产环境中的应用程序。作为Python程序员,了解如何优化并编写可重复利用的代码是一个重要的技能。它可以简化开发步骤,极大地提高程序的可维护性。SOLID(单一职责,开放封闭,里氏替换,接口分离和依赖倒置)是5个重要的软件设计原则,指导开发团队编写优质的可扩展和可持续维护的代码。SOLID原则尤其在Python程序开发中非常重要,本文将详细讨论Python中的SOLID原则。...

干货|火山引擎A/B测试平台的实验管理重构与DDD实践

什么样的修改违背设计意图。而且,他们以及团队中的其他人都背负着提升生产力的可怕压力。于是,他们会制造更多的混乱,驱动生产力向零那端不断下降。 因此,可以说补充人力在一定条件下是可以提升整体的进度... 对应到代码开发中可以归类为一些经典的原则与思想。软件工程经过60多年的发展,沉淀了很多有指导意义的方法论。比如SOLID原则、各种设计模式,以及大道至简的架构设计思想: **抽象、封装与隔离** 。这些方法论都可以...

火山引擎A/B测试平台的实验管理重构与DDD实践

不引入原则与规范的约束、不及时的采取手段,那么随着时间的流逝,大概的发展轨迹将会如下图所示。![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/7d82ce3fd7814b0491a4fed6ad... 对应到代码开发中可以归类为一些经典的原则与思想。软件工程经过60多年的发展,沉淀了很多有指导意义的方法论。比如SOLID原则、各种设计模式,以及大道至简的架构设计思想:**抽象、** **封装** **与隔离**。这些方法...

得物效率前端微应用推进过程与思考

**根据 SMART 原则,我们制定了如下目标(时间限制在 3 个月内):****1. 降低微应用化迁移成本,中大型应用的微应用化迁移耗时降低 30%**耗时降低计算公式:1 - (有 SOP 时微应用化迁移估时 / 无 SOP 时微应用... > 即最小知识原则,在 SOLID 设计原则中符合 「Single,单一职责;Open-Close:开闭原则」的思想。> > > > 我们在考虑微应用技术架构所具备的特征时,更注重 **简单、可靠、闭环** ,也就是迪米特法则。> ...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

它会违反SOLID原则吗?-优选内容

关于Python中的SOLID原则设计
Python是近年来非常流行的面向对象编程语言,它非常适合快速开发和生产环境中的应用程序。作为Python程序员,了解如何优化并编写可重复利用的代码是一个重要的技能。它可以简化开发步骤,极大地提高程序的可维护性。SOLID(单一职责,开放封闭,里氏替换,接口分离和依赖倒置)是5个重要的软件设计原则,指导开发团队编写优质的可扩展和可持续维护的代码。SOLID原则尤其在Python程序开发中非常重要,本文将详细讨论Python中的SOLID原则。...
火山引擎A/B测试平台的实验管理重构与DDD实践
不引入原则与规范的约束、不及时的采取手段,那么随着时间的流逝,大概的发展轨迹将会如下图所示。![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/7d82ce3fd7814b0491a4fed6ad... 对应到代码开发中可以归类为一些经典的原则与思想。软件工程经过60多年的发展,沉淀了很多有指导意义的方法论。比如SOLID原则、各种设计模式,以及大道至简的架构设计思想:**抽象、** **封装** **与隔离**。这些方法...
干货|火山引擎A/B测试平台的实验管理重构与DDD实践
什么样的修改违背设计意图。而且,他们以及团队中的其他人都背负着提升生产力的可怕压力。于是,他们会制造更多的混乱,驱动生产力向零那端不断下降。 因此,可以说补充人力在一定条件下是可以提升整体的进度... 对应到代码开发中可以归类为一些经典的原则与思想。软件工程经过60多年的发展,沉淀了很多有指导意义的方法论。比如SOLID原则、各种设计模式,以及大道至简的架构设计思想: **抽象、封装与隔离** 。这些方法论都可以...
得物效率前端微应用推进过程与思考
**根据 SMART 原则,我们制定了如下目标(时间限制在 3 个月内):****1. 降低微应用化迁移成本,中大型应用的微应用化迁移耗时降低 30%**耗时降低计算公式:1 - (有 SOP 时微应用化迁移估时 / 无 SOP 时微应用... > 即最小知识原则,在 SOLID 设计原则中符合 「Single,单一职责;Open-Close:开闭原则」的思想。> > > > 我们在考虑微应用技术架构所具备的特征时,更注重 **简单、可靠、闭环** ,也就是迪米特法则。> ...

它会违反SOLID原则吗?-相关内容

成本优化

该模型遵循最大化利用 CDN 服务商提供的峰值带宽免除窗口期的原则,动态地在多个 CDN 服务商之间分配流量,达到降低您在 CDN 服务商处结算的95峰值带宽的目的。 在成本优化调度过程中,多云CDN会在某个 CDN 服务商的峰值带宽免除窗口期内,将其实际带宽“堆高”,以降低同时刻您在其他 CDN 服务商处的带宽使用量。您需要创建一个优化计划,告知多云CDN不同 CDN 服务商的结算比例,以及允许带宽“堆高”的上限。多云CDN将依据优化计划,自...

veRTC(应用)用户协议

如您违反本协议或以任何形式超出我们授权使用本产品,我们有权立即终止前述许可,以避免您对本产品、我们的进一步损害。同时,您理解并同意,如本产品涉及我们的关联方或第三方的软件之许可使用的,您同意遵守相关的许可... 反对宪法确定的基本原则的; (2)危害国家安全,泄露国家秘密的,颠覆国家政权,破坏国家统一的; (3)损害国家荣誉和利益的; (4)歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、...

火山引擎隐私政策

我们会收集用于维护产品或服务安全稳定运行的必要信息。(2) 当您浏览或使用官网时,为了保障网站和服务的正常运行及运营安全,预防网络攻击、侵入风险,更准确地识别违反法律法规或火山引擎相关协议、服务规则的情况,... 原则上,当新功能或服务与我们当前提供的功能或服务相关时,收集与使用的个人信息将与原处理目的具有直接或合理关联。在与原处理目的无直接或合理关联的场景下,我们收集、使用您的个人信息,会再次按照法律法规及国家...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

火山引擎信息与网络安全规则

第五条 对任何涉嫌违反国家法律、行政法规、部门规章等规范性文件的行为,本规则已有规定的,适用本规则;本规则尚无规定的,火山引擎有权根据相关法律法规和适用文件酌情处理。 火山引擎有权随时变更本规则并在网站上... 查阅和传播下列信息:反对宪法所确定的基本原则的;危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;损害国家荣誉和利益的;煽动民族仇恨、民族歧视,破坏民族团结的;破坏国家宗教政策,宣扬邪教和封建迷信的;散...

安全说明

个⼈隐私性以及数据保护的法律法规和原则要求。 1.安全团队及职能火山引擎作为SaaS服务提供商,一直都把⽤户业务和数据的安全保护列为最⾼优先级⼯作。公司具有完善的基础架构安全以及⽤户业务、数据安全保护体系,可... 侵权或违反其与第三方的合同约定的情形,并不会将客户数据用于违法违规的目的。除为了提供产品和服务所必须,或经您的授权(如在适用情形下为进行故障排除、检测)外,火山引擎不会对您的客户数据进行任意使用,并在提供...

产品和服务测试协议

侵权或违反其与第三方的合同约定的情形,并不会将客户数据用于违法违规的目的。 除为了提供产品和服务所必须,或经您的授权(如在适用情形下为进行故障排除、检测)外,火山引擎不会对您的客户数据进行任意使用,并在提供... 不得实施如下行为:反对宪法确定的基本原则的; 危害国家安全,泄露国家秘密的,颠覆国家政权,破坏国家统一的; 损害国家荣誉和利益的; 歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士...

火山引擎声音复刻协议

该等内容不得包含任何违反适用的法律或侵犯第三方合法权益的内容。3.1.4 本服务生成数据的所有权及其知识产权,均由火山引擎所有并享有相关收益,您仅能基于本协议约定之目的而进行合理使用。未经火山引擎书面授权,您... 反对宪法确定的基本原则的;(2)危害国家安全,泄露国家秘密的,颠覆国家政权,破坏国家统一的;(3)损害国家荣誉和利益的;(4)歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖...

语音服务专用条款

违反公序良俗、不违反诚实信用原则的基础上,不得侵犯用户隐私权、侵扰用户个人生活安宁,侵犯用户个人信息,通过技术和管理手段建立防骚扰机制,设置严格且合理的语音呼叫及语音信息发送的用途、条件、范围、时间、频次等具体要求,不得向用户进行恶意骚扰或违法犯罪类、平台类相关电话拨出或语音信息发送。如因违反本条给用户造成损害的,您应自行处理并承担责任,因此给火山引擎造成损失的,您还应承担赔偿责任。4.7 为保障用户权益...

申明函

不会利用作废合同作为财务报销的凭据,不会将作废合同出示或展示给任何第三方作为商务合作的依据。 4、 甲方知悉并同意,对于合理的作废请求,乙方原则上不收取费用。但对多次重复、超出合理限度的作废请求,乙方将视具... 乙方可能会予以拒绝。 请您仔细阅读本申明函内容,一旦点击确定,本申明函即时生效,如您违反本申明的条款/条件导致乙方承担相应的损失,乙方保留追究相应法律责任的权利。

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询