아래의 코드는 디자인 패턴에 대해 조금 읽은 후에 작성한 것으로, 그 핵심을 알고 싶습니다. 이것은 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';
}
}
클래스의 일부를 변경하고 싶을 수 있습니다.
http://codereview.stackexchange.com/ – Mchl
@Mchl에서 물어보십시오. 이것은 실제 코드가 아닌 더미 예제입니다. 나는 디자인 원칙 아래 있는지 알아보기 위해 노력하고 있습니다. 이것이 속할 수있는 유일한 장소는 프로그래머 SE입니다. –
코드보기가 잘 맞을 것입니다.) – Mchl