QZQ的小世界!

  • 首页
你好!
这里是QZQ的博客站!
  1. 首页
  2. 未分类
  3. 正文

接口分离原则——Python案例理解

2024年12月30日 350点热度 0人点赞 0条评论

定义

接口分离原则(Interface Segregation Principle)用于处理胖接口(fat interface)所带来的问题。如果类的接口定义暴露了过多的行为,则说明这个类的接口定义内聚程度不够好。换句话说,类的接口可以被分解为多组功能函数的组合,每一组都服务于不同的客户类,而不同的客户类可以选择使用不同的功能分组。

简单来说,就是“客户端程序不应该依赖于它不需要的接口”。如果一个子类为了继承了父类,实现或者空载了父类很多方法,也就是父类一堆方法对它来说完全没用,那么这种情况就不符合接口分离原则。

案例

查资料的时候发现了有人已经实现了python案例,这里就直接用他的代码来解释

class Printer:
    def print_text(self, text):
        pass

    def print_image(self, image):
        pass

class LaserPrinter(Printer):
    def print_text(self, text):
        print("激光打印机打印文本:", text)

    def print_image(self, image):
        print("激光打印机不支持打印图片")

 

在这个传统的设计中,LaserPrinter类实现了整个Printer接口,包括打印文本和打印图片两个方法。然而,LaserPrinter并不支持打印图片,因此print_image()方法只是一个空实现。这样的设计使得LaserPrinter类依赖了它不需要的接口,增加了代码的冗余和复杂性。

而符合接口隔离原则的设计方式是将接口拆分为多个小接口:

class TextPrinter:
    def print_text(self, text):
        pass

class ImagePrinter:
    def print_image(self, image):
        pass

class LaserPrinter(TextPrinter):
    def print_text(self, text):
        print("激光打印机打印文本:", text)

 

这个设计中,我们将打印机接口拆分为了两个小接口TextPrinter和ImagePrinter,LaserPrinter类只实现了TextPrinter接口,这样就避免了它依赖不需要的接口。

这样的设计使得接口更加精简和专注,提高了代码的灵活性和可维护性。当我们需要一个只打印文本的打印机时,可以直接使用LaserPrinter类,而不需要担心它会有无用的接口。

参考

接口分离原则(Interface Segregation Principle) - sangmado - 博客园

(2 封私信) 如何理解接口隔离原则? - 知乎

接口隔离原则 (Interface Segregation Principle) - 知乎

面向对象编程的六大原则

最少知识原则——Python案例理解 - QZQ的小世界!

开放封闭原则——Python案例理解 - QZQ的小世界!

里氏替换原则——Python案例理解 - QZQ的小世界!

依赖倒置原则——Python案例理解 - QZQ的小世界!

单一职责原则——Python案例理解 - QZQ的小世界!

接口分离原则——Python案例理解 - QZQ的小世界!

 

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2025年3月12日

QZQ

一只涉猎广泛的技术爱好者,绝赞养猫中~

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月

分类

  • 技术
  • 未分类

COPYRIGHT © 2024 QZQ的小世界!. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang