下面的代碼是我在閱讀了一些關於設計模式後寫出來的,我想知道我是否有它的要點。這應該實現一個調解器設計模式,以及使用接口實現和工廠設計模式。試圖在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';
}
}
因爲你可能只希望改變班的一小部分,或者這是不好的做法?
你應該問這個http://codereview.stackexchange.com/ – Mchl
@Mchl這是一個虛擬的例子,而不是真正的代碼。我試圖看看我是否在設計原則下。唯一可能屬於的其他地方是程序員SE。 –
這將適合codereview以及恕我直言;) – Mchl