从头部设计图案(装饰图案):
“这是完全正确的。如果你有 依赖于具体组件的代码 类型,装饰器将破坏该代码。 只要您只编写代码 抽象组件类型,使用 装饰者将保持透明 码。但是,一旦开始编写代码 对于混凝土构件,你会想要的 重新考虑您的应用程序设计和使用 装饰者。“
好吧,我遇到了这个问题,我确实想要应用继承,因为我必须重用metods和属性,但我仍然需要基于类/类型工作。使用组合而不是继承适用于方法,但我如何才能在属性上实现相同的功能呢?我不能用那个构成......还是我呢?
PD:感谢您的时间,希望您可以与我的英语交流:P我的问题:
假设他们都有一套值得继承的方法。 (有些方法,一些知道员工在哪里工作,另一个告诉电话号码与他联系)。
所以,起初我从类Employee继承它们,但这导致管理员引用Employee来了解他所负责的员工组,因此,我无法重新分配他的员工并安排他们的工作基于他们的角色类型。
我不能帮助,但我认为我打破了liskov原则......但继承看起来非常方便,属性最重要。
答案 0 :(得分:0)
如果不了解整个背景,就没有简单的答案。但是,根据我的经验,在这种情况下继承(用户+角色)迟早会导致问题。
恕我直言的管理员,主管,技术人员和顾问都是员工,但这并不意味着我们应该以扩展员工的管理员,主管等课程结束。我认为他们都是员工,但他们的角色是不同的。如果员工和角色之间的关系组织良好,我们可以拥有一个具有多个角色的员工:
class Employee {}
interface Role {}
class Admin implements Role {}
class Superviosr implements Role {}
类对象应包含所有员工共同的所有属性和行为,而角色/角色应确定特定角色的特定行为。
对于管理员及其对其他员工的引用问题,提出一个好的解决方案可能会更难。然而,它需要有关如何在代码/应用程序中使用它的更多信息。