在过去的几年中,我参与了一些项目,我们在对象层次结构中遇到了一个类似的问题,这似乎总是会导致问题。我想知道是否有任何经典的OOP(Java、C#、PHP5等)设计模式可以优雅地处理这种情况。
假设我们有一个现有系统。该系统具有两种类型的实体,每个实体都用一个单独的类建模。比方说:
1. 客户 2. 销售代表
由于历史原因,这些类都没有继承相同的基类或共享通用接口。
我看到的问题是,不可避免地,新功能被规定为需要将客户和销售代表视为同一类型的对象。过去处理这个问题的方式是创建一个包含两者成员变量的新类,然后每个方法将根据设置的对象以不同的方式操作。
有没有更优雅的方式处理这种情况?
假设我们有一个现有系统。该系统具有两种类型的实体,每个实体都用一个单独的类建模。比方说:
1. 客户 2. 销售代表
由于历史原因,这些类都没有继承相同的基类或共享通用接口。
我看到的问题是,不可避免地,新功能被规定为需要将客户和销售代表视为同一类型的对象。过去处理这个问题的方式是创建一个包含两者成员变量的新类,然后每个方法将根据设置的对象以不同的方式操作。
//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
}
}
}
有没有更优雅的方式处理这种情况?