【发布时间】:2009-09-16 16:28:02
【问题描述】:
在过去的几年里,我参与的项目中,我们在对象层次结构中遇到了类似的问题,似乎总是会导致问题。我很好奇这里是否有人知道可以优雅地处理这种情况的经典 OOP(Java、C#、PHP5 等)设计模式。
假设我们有一个现有的系统。除其他外,该系统具有两种类型的实体,每种实体都使用单独的类进行建模。比方说
客户
销售代表
由于历史原因,这些类都不是从同一个基类继承的,也不是共享一个公共接口。
我看到的问题是,不可避免地,需要我们将 Customer 和 SalesRepresentative 视为同一类型的对象的新功能。我过去看到的处理方式是创建一个新类,其中包含两者的成员变量,然后每个方法将对对象进行不同的操作,具体取决于设置的对象
//pseudo PHPish code
class Participator
{
public $customer;
public $salesRepresentative;
public function __construct($object)
{
if(object is instance of Customer)
{
$this->customer = $object;
}
if(object is instance of SalesRepresentative)
{
$this->salesRepresentative = $object;
}
}
public function doesSomething()
{
if($customer)
{
//We're a customer, do customer specific stuff
}
else if($salesRepresentative)
{
//We're a salesRepresentative, do sales
//representative specific stuff
}
}
}
有没有更优雅的方式来处理这种情况?
【问题讨论】:
标签: c# java php design-patterns oop