首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在PHP中实现适当的模式,对吗?

尝试在PHP中实现适当的模式,对吗?
EN

Stack Overflow用户
提问于 2011-08-14 01:52:10
回答 1查看 89关注 0票数 2

下面的代码是我在读了一些关于设计模式的内容后写的,我想知道我是否有它的要点。这应该实现一个中介器设计模式,以及使用接口重于实现和工厂设计模式。

代码语言:javascript
复制
<?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();

这种方法的明显好处是可以很容易地用自定义类替换应用程序的默认类。您的自定义类甚至可以扩展原始类并只覆盖单个方法,不是吗?如下所示:

代码语言:javascript
复制
<?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';
    }
}

因为您可能只希望更改类的一小部分,或者这是不好的做法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-14 07:58:07

试图用PHP实现合适的模式,对吗?

不,不需要查看你的代码就会意识到你不理解什么是模式。

模式是你的代码,而不是它应该是什么或者任何类型的模板。它是描述模块抽象功能的一种快速方法。因此,它是描述代码和规划课程的有用工具。

作为一组模式来计划和实现您的项目,对于软件工程/开发来说是一种非常误导的方法。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7052242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档