我需要創建一個多態對象的系統。如何從特定的類或屬性中選擇定義的類型?
每種類型的對象都應該由特定的處理程序來處理,因此我需要確定哪些類型可以正確處理。
我想知道什麼是最好的設計決定:
創建一個抽象基類像
ObjectBase
,然後擴展到特定 對象,像CustomObjectA
和CustomObjectB
創建通用對象
GenericObject
和使用$type
屬性傳遞給構造函數(type
應該是不可變的)。
注意對象沒有什麼不同,只是他們的處理方式,我的意思是,有沒有添加屬性或方法或任何他們的行爲。
任何反饋?
編輯:
首先解決
abstract class ObjectBase {}
class CustomObjectA extends ObjectBase {}
class HandlerManager {
public function process(ObjectBase $object) {
if ($object instanceof CustomObjectA) {
$customObjectAHandler->process($object);
}
}
}
解決方法二
class GenericObject {
protected $type;
public function __construct($type)
{
$this->type = $type;
}
}
class ObjectTypeAHandler {
public function process(GenericObject) {
}
public function supportsType(GenericObject $object)
{
return 'typeA' === $object->getType();
}
}
class HandlerManager {
public function process(GenericObject $object) {
if ($customObjectAHandler->supportType($object)) {
$customObjectAHandler->process($object);
}
}
}
我不認爲處理程序應該設置在對象級別,它應該知道它的處理程序,它是針對很多OOP規則(見SOLID)Imho – Trent
我認爲我不清楚:我的建議是抽象工廠模式的變體,只有對象也扮演抽象工廠的角色。 –