重用属性 - 组合而不是继承

时间:2016-01-31 00:44:44

标签: oop inheritance design-patterns uml

从头部设计图案(装饰图案):

“这是完全正确的。如果你有 依赖于具体组件的代码 类型,装饰器将破坏该代码。 只要您只编写代码 抽象组件类型,使用 装饰者将保持透明 码。但是,一旦开始编写代码 对于混凝土构件,你会想要的 重新考虑您的应用程序设计和使用 装饰者。“

好吧,我遇到了这个问题,我确实想要应用继承,因为我必须重用metods和属性,但我仍然需要基于类/类型工作。使用组合而不是继承适用于方法,但我如何才能在属性上实现相同的功能呢?我不能用那个构成......还是我呢?

PD:感谢您的时间,希望您可以与我的英语交流:P

EDIT1

我的问题:

  • 我有管理员,主管,技术人员和顾问。管理员负责一组主管,技术人员和顾问。
  • 管理员可以使用主管来涵盖技术功能。
  • 员工扮演主要角色。
  • 技术人员也可以是顾问。
  • 如果是技术执行顾问任务,将获得奖金。
  • 顾问在客户办公室工作,而管理员,主管和技术人员在公司办公室工作。
  • 在公司外工作的员工被认为是手机号码,而在公司工作的员工可以被叫到办公室的实习生。
  • 员工编号,姓名和工资是了解员工的信息。

假设他们都有一套值得继承的方法。 (有些方法,一些知道员工在哪里工作,另一个告诉电话号码与他联系)。

所以,起初我从类Employee继承它们,但这导致管理员引用Employee来了解他所负责的员工组,因此,我无法重新分配他的员工并安排他们的工作基于他们的角色类型。

我不能帮助,但我认为我打破了liskov原则......但继承看起来非常方便,属性最重要。

1 个答案:

答案 0 :(得分:0)

如果不了解整个背景,就没有简单的答案。但是,根据我的经验,在这种情况下继承(用户+角色)迟早会导致问题。

恕我直言的管理员,主管,技术人员和顾问都是员工,但这并不意味着我们应该以扩展员工的管理员,主管等课程结束。我认为他们都是员工,但他们的角色是不同的。如果员工和角色之间的关系组织良好,我们可以拥有一个具有多个角色的员工:

class Employee {}
interface Role {}
class Admin implements Role {}
class Superviosr implements Role {}

类对象应包含所有员工共同的所有属性和行为,而角色/角色应确定特定角色的特定行为。

对于管理员及其对其他员工的引用问题,提出一个好的解决方案可能会更难。然而,它需要有关如何在代码/应用程序中使用它的更多信息。