下面的代码是我在读了一些关于设计模式的内容后写的,我想知道我是否有它的要点。这应该实现一个中介器设计模式,以及使用接口重于实现和工厂设计模式。
<?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';
}
}因为您可能只希望更改类的一小部分,或者这是不好的做法吗?
发布于 2011-08-14 07:58:07
试图用PHP实现合适的模式,对吗?
不,不需要查看你的代码就会意识到你不理解什么是模式。
模式是你的代码,而不是它应该是什么或者任何类型的模板。它是描述模块抽象功能的一种快速方法。因此,它是描述代码和规划课程的有用工具。
作为一组模式来计划和实现您的项目,对于软件工程/开发来说是一种非常误导的方法。
https://stackoverflow.com/questions/7052242
复制相似问题