首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利斯科夫的替代原则是否与开放/封闭原则相冲突?

利斯科夫的替代原则是否与开放/封闭原则相冲突?
EN

Stack Overflow用户
提问于 2020-01-09 09:29:05
回答 1查看 220关注 0票数 3

今天有人问我,利斯科夫的替代原则如何与开放/封闭原则冲突,有什么想法吗?

这是否与用OC原则扩展父类,然后不能作为Liskov原则的替代品有关?

EN

回答 1

Stack Overflow用户

发布于 2020-01-09 17:11:58

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

如果你想坚持打开/关闭原则,你应该创建一个从A派生的子类,它的行为不同(因为这个原则禁止你改变类A)

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

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

示例

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

开放/关闭原则指出,你必须创建一个子类'JsonStorageController‘,它覆盖了这个方法来存储json而不是xml。然而,这违反了利斯科夫原则,因为JsonStorageController不能简单地替换StorageController。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59656024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档