在過去幾年中,我一直在處理類似問題的項目,這些問題始終會導致問題。我很好奇,如果有人知道經典的OOP(Java,C#,PHP5等)設計模式,可以優雅地處理這種情況。處理將相似實體分組在一起的設計模式
假設我們有一個現有的系統。除此之外,這個系統還有兩種類型的實體,每個實體都由一個單獨的類來建模。比方說,
客戶
的SalesRepresentative
由於歷史原因,既不是這些類的從同一個基類繼承或共享一個通用的接口。
我所看到的問題不可避免地會出現一個新特性,需要我們將客戶和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
}
}
}
操作是否有處理這種情況的更優雅的方式?
+1:適配器模式的很好例子。 – Adamski 2009-09-16 16:35:38
+1與OP的建議類似的邏輯,但比每個方法中的if/else塊更容易閱讀和維護。如果直到運行時才知道類型,則可能與靜態工廠方法耦合。 – 2009-09-16 16:40:06
+1 - 但您需要添加工廠以創建適當的ParticipatorWrapper,或者更改新的ParticipatorWrapper(新的Customer())行來創建CustomerWrapper。 – 2009-09-16 16:40:24