gpt4 book ai didi

oop - Liskov 替换原则是否与开放/封闭原则冲突?

转载 作者:行者123 更新时间:2023-12-02 02:40:46 24 4
gpt4 key购买 nike

今天有人问我里氏代换原则与开闭原则有何冲突,有什么想法吗?

是不是跟用OC原理扩展父类,然后用里氏原理不能介入替代有关系吗?

最佳答案

假设您有一个包含具有某些功能的类 A 的库,并且您想要更改此类(的一部分)的行为。

如果您想遵守开闭原则,您应该创建一个派生自 A 且行为不同的子类(因为该原则禁止您更改类 A)

如果您想遵守里氏原则,则不允许创建具有不同行为的子类,因此您应该更改原始类。

这意味着在这种情况下不可能同时遵守这两个原则。

示例

“StorageController”类有一个函数 Store(),它将您的项目存储为 XML 文件。现在您想更改它,以便它存储一个 JSON 文件。

打开/关闭原则表明您必须创建一个子类“JsonStorageController”来覆盖此方法以存储 json 而不是 xml。然而,这违反了里氏原则,因为 StorageController 不能简单地用 JsonStorageController 替换。

当然还有其他不违反这些原则的解决方案,例如覆盖基类并添加一个额外的方法“StoreToJson”,但是这些可能会违反其他原则,例如单一职责原则(给出两个子类的不同职责)。

关于oop - Liskov 替换原则是否与开放/封闭原则冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59656024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com