zvvq技术分享网

掌握 Java 的 SOLID 原则:实用指南(java update有什

作者:zvvq博客网
导读SOLID 原则对于任何旨在构建健壮、可维护系统的开发人员来说都是基础。这些原则不仅提高了代码质量,而且促进了项目的团队合作和可扩展性。让我们通过 Java 中的实际示例深入研究

内容来自samhan666

SOLID 原则对于任何旨在构建健壮、可维护系统的开发人员来说都是基础。这些原则不仅提高了代码质量,而且促进了项目的团队合作和可扩展性。让我们通过 Java 中的实际示例研究这些原则,重点介绍常见违规行为和推荐做法。

内容来自samhan

1.单一职责原则(SRP)

原则:一个类应该只有一个改变的理由。 内容来自samhan

违反建议零售价: 内容来自samhan

1 内容来自samhan666

2

内容来自samhan666

3

内容来自zvvq

4

zvvq

5 zvvq好,好zvvq

6

内容来自zvvq

7

本文来自zvvq

8 zvvq好,好zvvq

9

内容来自samhan666

10 内容来自zvvq,别采集哟

11

zvvq好,好zvvq

12

copyright zvvq

公开课用户{

zvvq

私有字符串名称;

内容来自zvvq,别采集哟

私人字符串电子邮件;

zvvq好,好zvvq

公共无效保存用户{

zvvq

// 将用户保存到数据库的逻辑

zvvq.cn

}

zvvq.cn

公共无效发送电子邮件{

内容来自samhan

// 向用户发送电子邮件的逻辑

zvvq好,好zvvq

}

zvvq.cn

} copyright zvvq

在此示例中,User 类具有多个职责:管理用户数据和发送电子邮件。 copyright zvvq

应用建议零售价:

copyright zvvq

1 内容来自zvvq

2

内容来自samhan

3

zvvq

4

内容来自samhan666

5

zvvq.cn

6 zvvq好,好zvvq

7 zvvq.cn

8 内容来自zvvq

9

zvvq好,好zvvq

10 zvvq.cn

11

zvvq好,好zvvq

12

zvvq好,好zvvq

13 zvvq好,好zvvq

14

内容来自samhan

15 本文来自zvvq

16 本文来自zvvq

公开课用户{ 本文来自zvvq

私有字符串名称; 内容来自samhan666

私人字符串电子邮件;

zvvq

} 内容来自zvvq

公共类用户存储库{

内容来自samhan666

公共无效保存用户(用户用户){

内容来自zvvq

// 将用户保存到数据库的逻辑

zvvq好,好zvvq

}

内容来自zvvq

} zvvq.cn

公共类电子邮件服务{ zvvq

公共无效sendEmail(用户用户){

内容来自samhan

// 向用户发送电子邮件的逻辑 本文来自zvvq

} 内容来自samhan

} zvvq

在这里,我们将职责划分为不同的类别,遵循 SRP。 本文来自zvvq

”; zvvq好,好zvvq

2. 开闭原理(OCP)

原则:类应该对扩展开放,对修改关闭。

copyright zvvq

违反 OCP:

内容来自samhan666

1 内容来自zvvq,别采集哟

2

zvvq.cn

3

内容来自samhan666

4 内容来自zvvq,别采集哟

5 内容来自zvvq,别采集哟

6

内容来自zvvq,别采集哟

7 内容来自samhan666

8

内容来自samhan666

9 zvvq好,好zvvq

10 本文来自zvvq

公共课折扣计算器 { 内容来自samhan666

公共双计算折扣(字符串类型){ 内容来自samhan

if (type.equals("NORMAL")) { 内容来自zvvq

返回0.05; zvvq.cn

} else if (type.equals("SPECIAL")) { 内容来自zvvq

返回0.1;

本文来自zvvq

}

内容来自zvvq

返回0; zvvq.cn

} zvvq.cn

}

内容来自zvvq,别采集哟

在此示例中,任何新的折扣类型都需要修改 DiscountCalculator 类。 zvvq

应用 OCP: 内容来自zvvq,别采集哟

1 zvvq.cn

2

zvvq好,好zvvq

3 zvvq好,好zvvq

4

zvvq.cn

5 内容来自samhan

6 内容来自samhan

7

内容来自zvvq,别采集哟

8 copyright zvvq

9 内容来自zvvq,别采集哟

10

内容来自zvvq,别采集哟

11

内容来自samhan666

12 内容来自zvvq

13

copyright zvvq

14 内容来自samhan

15 copyright zvvq

16 zvvq好,好zvvq

17 zvvq.cn

18 zvvq

19 内容来自zvvq

20 zvvq

21 zvvq

公共接口折扣 { 内容来自samhan666

双计算折扣;

本文来自zvvq

} 内容来自zvvq,别采集哟

公共类 NormalDiscount 实现 Discount { 内容来自zvvq,别采集哟

公共双计算折扣{

本文来自zvvq

返回0.05;

本文来自zvvq

} zvvq好,好zvvq

}

zvvq

公共类 SpecialDiscount 实现 Discount { 本文来自zvvq

公共双计算折扣{

内容来自samhan666

返回0.1; 内容来自samhan

}

内容来自zvvq,别采集哟

}

zvvq.cn

公共类折扣计算器{

内容来自samhan666

公共双计算折扣(折扣折扣){ 内容来自zvvq,别采集哟

返回折扣.calculateDiscount(); 内容来自zvvq

}

zvvq

} 本文来自zvvq

在这种情况下,DiscountCalculator 关闭以进行修改,但可以通过实施新的折扣类型进行扩展。 内容来自samhan666

3.里氏替换原理(LSP)

原则:子类应该可以被基类替换,而不影响程序的正确性。

copyright zvvq

违反LSP: 内容来自zvvq,别采集哟

1

内容来自samhan666

2

内容来自samhan

3 内容来自zvvq,别采集哟

4 内容来自zvvq

5 内容来自zvvq,别采集哟

6

内容来自zvvq,别采集哟

7

内容来自samhan

8 zvvq.cn

9 copyright zvvq

10 内容来自zvvq,别采集哟

11

zvvq.cn

12 zvvq

公开课鸟{ 本文来自zvvq

公共无效飞行{

zvvq好,好zvvq

// 飞行实现 zvvq好,好zvvq

} 内容来自zvvq,别采集哟

} 内容来自zvvq,别采集哟

公共类企鹅扩展了鸟{ 内容来自zvvq,别采集哟

@覆盖 copyright zvvq

公共无效飞行{ zvvq.cn

throw new UnsupportedOperationException("企鹅不会飞"); copyright zvvq

}

内容来自samhan

} zvvq.cn

这里,Penguin类不能代替Bird而不影响程序的正确性。

内容来自samhan

应用 LSP: zvvq.cn

1 内容来自zvvq

2 内容来自samhan666

3

内容来自zvvq,别采集哟

4 内容来自zvvq

5

copyright zvvq

6

zvvq.cn

7

内容来自zvvq,别采集哟

8

本文来自zvvq

9 zvvq好,好zvvq

10

本文来自zvvq

11 内容来自samhan

公共抽象类 Bird {

内容来自samhan666

} 内容来自zvvq,别采集哟

公共类 FlyingBird 扩展 Bird {

copyright zvvq

公共无效飞行{ 内容来自zvvq,别采集哟

// 飞行实现

内容来自samhan666

}

zvvq.cn

}

zvvq好,好zvvq

公共类企鹅扩展了鸟{

内容来自samhan

} 本文来自zvvq

现在,FlyingBird 和 Penguin 分开了,尊重 Bird 被其子类取代的能力。

copyright zvvq

4. 接口隔离原则(ISP)

原则:不应该强迫客户端依赖他们不使用的接口。

内容来自samhan

违反ISP: 内容来自zvvq,别采集哟

1 内容来自zvvq,别采集哟

2

zvvq好,好zvvq

3

内容来自zvvq,别采集哟

4

内容来自zvvq,别采集哟

5 内容来自samhan

6

zvvq.cn

7 copyright zvvq

8

zvvq.cn

9 内容来自samhan

10 zvvq

11

内容来自samhan

12

内容来自zvvq,别采集哟

13

zvvq好,好zvvq

14 内容来自zvvq

15 内容来自zvvq

16

copyright zvvq

17 copyright zvvq

18 内容来自samhan666

19 zvvq

公共界面动物{

内容来自samhan666

无效步行; 内容来自zvvq,别采集哟

无效飞行; 内容来自samhan

无效游泳;

内容来自zvvq

}

内容来自zvvq,别采集哟

公共类 Dog 实现 Animal {

内容来自samhan

公共无效步行{

zvvq好,好zvvq

// 步行实现 内容来自zvvq,别采集哟

}

内容来自zvvq,别采集哟

公共无效飞行{ 内容来自samhan

抛出新的 UnsupportedOperationException();

zvvq好,好zvvq

}

本文来自zvvq

公共无效游泳{

zvvq好,好zvvq

// 狗会游泳 内容来自samhan

} 内容来自zvvq

} zvvq.cn

这里,Dog被迫实现fly,这是不相关的。 内容来自zvvq,别采集哟

应用ISP:

copyright zvvq

1

copyright zvvq

2 内容来自zvvq

3 内容来自samhan

4 zvvq好,好zvvq

5 本文来自zvvq

6

内容来自samhan

7 内容来自zvvq

8 内容来自samhan

9

本文来自zvvq

10

zvvq

11 zvvq好,好zvvq

12

内容来自samhan666

13

zvvq好,好zvvq

14 zvvq.cn

15 zvvq好,好zvvq

16

内容来自samhan

17

内容来自samhan

18

内容来自samhan

19

copyright zvvq

20

zvvq.cn

21

zvvq好,好zvvq

公共界面步行{ 内容来自samhan

无效步行; 内容来自samhan666

}

copyright zvvq

公共接口可飞{ zvvq好,好zvvq

无效飞行; 内容来自samhan

} 内容来自zvvq

公共接口可游泳{

内容来自samhan666

无效游泳; zvvq

} 本文来自zvvq

公共类 Dog 实现 Walkable、Swimmable {

copyright zvvq

公共无效步行{ 内容来自samhan

// 步行实现

zvvq

} copyright zvvq

公共无效游泳{ 内容来自zvvq,别采集哟

// 游泳实现

zvvq

}

内容来自zvvq

}

zvvq

现在,Dog 只实现与其动作相关的接口。 内容来自zvvq

5. 依赖倒置原则(DIP)

原则:高层模块不应该依赖于低层模块。两者都应该依赖于抽象。

内容来自samhan

违反 DIP:

本文来自zvvq

1

内容来自zvvq,别采集哟

2 zvvq好,好zvvq

3

本文来自zvvq

4 内容来自samhan

5

copyright zvvq

6

内容来自samhan666

7 zvvq好,好zvvq

8

内容来自zvvq

9 内容来自samhan

10

zvvq

11

本文来自zvvq

12

zvvq

13 内容来自zvvq

公共课灯泡{ 内容来自samhan

公共无效打开{

内容来自samhan

// 打开灯泡

内容来自samhan

}

zvvq.cn

}

内容来自zvvq

公共类电力开关{ 内容来自samhan

私有 LightBulb lightBulb = new LightBulb(); zvvq.cn

公共无效按下{ 内容来自zvvq,别采集哟

灯泡.turnOn(); 内容来自samhan

} 内容来自samhan666

}

zvvq

ElectricPowerSwitch 直接依赖于 LightBulb,一个低级模块。

copyright zvvq

应用 DIP: 内容来自zvvq

1

zvvq好,好zvvq

2

内容来自samhan666

3 本文来自zvvq

4

zvvq

5

zvvq.cn

6 内容来自zvvq

7 本文来自zvvq

8 内容来自samhan

9

本文来自zvvq

10

内容来自samhan666

11 zvvq.cn

12

zvvq.cn

13 内容来自samhan

14

本文来自zvvq

15 内容来自samhan

16 zvvq

17

内容来自zvvq

18

copyright zvvq

19 本文来自zvvq

20 内容来自zvvq

21

内容来自zvvq,别采集哟

公共界面可切换{

内容来自samhan666

无效打开;

copyright zvvq

}

zvvq好,好zvvq

公共类 LightBulb 实现可切换 { 内容来自zvvq

公共无效打开{ copyright zvvq

// 打开灯泡

内容来自zvvq,别采集哟

} 内容来自zvvq

} 内容来自zvvq,别采集哟

公共类电力开关{

本文来自zvvq

私人可切换客户端;

内容来自samhan

公共 ElectricPowerSwitch(可切换客户端){

内容来自zvvq

this.client = 客户端; zvvq.cn

} 本文来自zvvq

公共无效按下{ zvvq.cn

客户端.turnOn(); 内容来自zvvq,别采集哟

}

zvvq

}

内容来自zvvq

现在,ElectricPowerSwitch 依赖于一个抽象(Switchable),这使得设计更加灵活和可持续。

zvvq好,好zvvq

结论 copyright zvvq

在 Java 中应用 SOLID 原则不仅是良好的理论实践,而且是保持软件灵活性、可持续性和可理解性的行之有效的策略。我希望这些示例有助于说明如何在自己的软件项目中实现这些原则。

以上就是掌握 Java 的 SOLID 原则:实用指南的详细内容,更多请关注其它相关文章! 内容来自zvvq