我試圖設計一些類層次結構,並在此部分「卡住」。抽象類 - 兒童類型
比方說,我有以下類
abstract class Video
{
const TYPE_MOVIE = 1;
const TYPE_SHOW = 2;
abstract public function getTitle();
abstract public function getType();
}
class Movie extends Video
{
// ...
public function getType()
{
return self::TYPE_MOVIE;
}
}
class Show extends Video
{
// ...
public function getType()
{
return self::TYPE_SHOW;
}
}
在系統我有(分析器)類的有多種不同的組成部分,它封裝 電影放映對象的創建和返回OBJ。給客戶。
問題:什麼是獲得一個obj類型的最佳方式。從解析器/工廠類返回,使客戶可以這樣做
$video = $parser->getVideo('Dumb and Dumber');
echo $video->getTitle();
// Way 1
if($video->getType == 'show') {
echo $video->getNbOfSeasons();
}
// Way 2
if($video instanceof Show) {
echo $video->getNbOfSeasons();
}
// Current way
if($video->getType == Video::TYPE_SHOW) {
echo $video->getNbOfSeasons();
}
難道還有比我的解決方案更好的辦法(讀作:沒有我的解決方案吸)?
+1完美的例子來解釋任何問題...... – 2012-04-23 08:50:28