Objective C 类别 vs 开放/封闭原则
Posted
技术标签:
【中文标题】Objective C 类别 vs 开放/封闭原则【英文标题】:Objective C Category vs open/closed principle 【发布时间】:2011-04-21 15:21:33 【问题描述】:根据Open/Closed原则
。 . .软件实体(类、模块、函数等)应该对扩展开放,对修改关闭
那么我可以说类别严重违反了这一原则吗?
【问题讨论】:
你也可以说Objective-C的所有动态运行时都违反了这个原则,但这并不意味着两者都不能有效使用。 【参考方案1】:我不明白怎么做。类别允许您添加依赖于现有界面的功能。它们不允许您对原始类进行任何真正的更改,它们只是提供一些语法糖,让您产生新方法已添加到类中的错觉。
换句话说,类别可以帮助您扩展一个类。他们不修改它。似乎它们强化了开放/封闭原则。
【讨论】:
类别也可以让你覆盖一个方法(一次)。 是的,但覆盖仅适用于该类别的用户。原始类的用户不受影响。【参考方案2】:我认为“对修改关闭”的标准解释是指“添加新功能不需要修改现有代码”。使用这种解释,类别不会违反开放/封闭原则,因为编写新的类别方法并不构成修改现有代码。
至于类别方法可以替换类上现有方法的特殊情况,它可能不违反开放/封闭原则,但因为它很危险,所以不赞成。这是语言的那些“可以这样做,但不能” 特性之一。
【讨论】:
以上是关于Objective C 类别 vs 开放/封闭原则的主要内容,如果未能解决你的问题,请参考以下文章