2011-08-13 3 views
2

아래의 코드는 디자인 패턴에 대해 조금 읽은 후에 작성한 것으로, 그 핵심을 알고 싶습니다. 이것은 Mediator 디자인 패턴을 구현하고 인터페이스를 구현 및 Factory 디자인 패턴을 사용하여 구현해야합니다.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

코드보기가 잘 맞을 것입니다.) – Mchl

답변

-1

PHP에서 적절한 패턴을 구현하려고 시도하는 것이 맞습니까?

아니요, 패턴을 이해하지 못한다는 사실을 깨닫지 않아도됩니다.

패턴은 귀하의 코드 인 형식입니다. 어떤 형식이든 템플릿이든 상관 없습니다. 모듈의 추상 기능을 빠르게 설명하는 방법입니다. 따라서 코드를 설명하고 커리큘럼을 계획하는 데 유용한 도구입니다.

프로젝트를 패턴 세트로 계획하고 구현하는 것은 소프트웨어 엔지니어링/개발에 대한 잘못된 접근법입니다.

+0

예, 디자인 패턴은 "여러 가지 상황에서 사용할 수있는 문제를 해결하는 방법에 대한 설명 또는 템플릿"입니다. 내 코드가 디자인 패턴이 설명하는 것과 일치하는지 묻습니다. 디자인 패턴은 일련의 지침처럼 보입니다. 또한 디자인 패턴 책은 템플릿으로 설명하므로 잘못된 것일 수 있습니다. –

관련 문제