2011-08-13 43 views
2

下面的代碼是我在閱讀了一些關於設計模式後寫出來的,我想知道我是否有它的要點。這應該實現一個調解器設計模式,以及使用接口實現和工廠設計模式。試圖在PHP中實現適當的模式,這是正確的嗎?

<?php 
interface iNav_Walker 
{ 
    public function walk(); 
} 

class Nav_Walker 
{ 
    public static function factory() 
    { 
     $class_name = 'Generic_Nav_Walker'; 
     $class_name = filter('nav_walker_class', $class_name); 

     $object = new $class_name; 

     return $object; 
    } 

    private function __construct() 
    { 
     return FALSE;  
    } 
} 

class Generic_Nav_Walker implements iNav_Walker 
{ 
    public function walk() 
    { 
     echo 'Generic Nav Walker'; 
    } 
} 

class Custom_Nav_Walker implements iNav_Walker 
{ 
    public function walk() 
    { 
     echo 'Custom Nav Walker'; 
    } 
} 

class MyPlugin 
{ 
    public static function use_custom_walker($walker_class) 
    { 
     return 'Custom_Nav_Walker'; 
    } 
} 

add_filter('nav_walker_class', array('MyPlugin', 'use_custom_walker_class')); 

$nav_walker = Nav_Walker::factory(); 
$nav_walker->walk(); 

這種方法的明顯好處是可以很容易地用自定義類替換應用程序的默認類。你的自定義的甚至可以擴展原來的類,只是重寫一個單一的方法嗎?像這樣:

<?php 
class Generic_Nav_Walker implements iNav_Walker 
{ 
    public function walk() 
    { 
     echo 'Generic Nav Walker'; 
    } 

    public function other_func() 
    { 
     // Do something 
    } 

    public function other_func2() 
    { 
     // Do something 
    } 
} 

class Custom_Nav_Walker extends Generic_Nav_Walker implements iNav_Walker 
{ 
    public function walk() 
    { 
     echo 'Custom Nav Walker'; 
    } 
} 

因爲你可能只希望改變班的一小部分,或者這是不好的做法?

+0

你應該問這個http://codereview.stackexchange.com/ – Mchl

+0

@Mchl這是一個虛擬的例子,而不是真正的代碼。我試圖看看我是否在設計原則下。唯一可能屬於的其他地方是程序員SE。 –

+0

這將適合codereview以及恕我直言;) – Mchl

回答

-1

試圖在PHP中實現適當的模式,是嗎?

不,不需要看你的代碼,以實現你不明白什麼模式。

模式是什麼你的代碼 - 不是它應該是什麼或任何類型的模板。這是描述模塊抽象功能的一種快速方法。因此是描述代碼和計劃課程的有用工具。

作爲一套模式來規劃和實施你的項目是一個非常錯誤的軟件工程/開發方法。

+0

是啊,設計模式是「如何解決一個問題,可以在許多不同情況下使用的描述或模板。」我在問我的代碼是否與設計模式描述的一致。設計模式對我來說似乎是一系列的指導方針。此外,Design Patterns書籍將其描述爲模板,所以我認爲你可能不正確。 –

相關問題