【发布时间】:2012-01-12 05:39:41
【问题描述】:
我有一个应用程序,其中许多对象都扩展了一个抽象类,该类定义了create()edit()retrieve() 和delete() 等方法。由于每个子类对这些函数使用相同的逻辑,因此抽象类定义了默认行为,并且在需要扩充的少数情况下,子类可以覆盖或使用我内置的钩子。
现在我遇到了一些子类需要不可变的情况,这意味着它们不应该有 edit() 或 delete() 方法。对我来说,这听起来像是一个名为immutable 之类的接口的工作,不可变类可以实现该接口。问题是接口不会阻止方法被调用,它们只是强制方法的存在。所以这显然是行不通的。
创建两个父类,一个用于可变对象,一个用于不可变对象,这很丑陋,并且可能会在维护时提出问题。我可以让不可变对象用一个什么都不做的空方法覆盖有问题的方法,但这似乎也很混乱,就像我当时没有做正确的 OOP。
那么,您认为允许大量类都继承一组方法但其中一些不继承所有方法的最佳方法是什么? (有问题的应用程序是用 php 编写的,但任何语言的通用 OOP 技术仍然有用)。
【问题讨论】:
标签: php oop inheritance