>  기사  >  백엔드 개발  >  PHP 디자인 패턴 추상 공장

PHP 디자인 패턴 추상 공장

不言
不言원래의
2018-04-18 11:39:371749검색

이 기사에서는 특정 참조 가치가 있는 PHP 디자인 패턴의 추상 팩토리를 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구들이 참조할 수 있습니다.

팩토리 메소드를 배우고 나서 제가 이해한 팩토리 메소드는 예를 들어 게임을 할 때 관우 영웅과 장비 영웅이 생성됩니다.
그러나 때때로 프로그램 설계 중에 객체 세트를 생성해야 할 수도 있으며, 이는 두 번째 생성 설계 패턴인

Abstract Factory Method(AbstractFactory)로 이어집니다. 예를 들어 관우를 만들 때 청룡연월검을 들고 빨간 토끼 말을 타고 있었습니다.
유비가 창조되었을 때 그는 수검과 암검을 모두 손에 쥐고 말을 탔습니다.
그러면 무기를 구현하려면 하나의 클래스가 필요하고, 말은 구현하려면 또 다른 클래스가 필요합니다.
캐릭터+무기+탈것이 조합이 됩니다.
마지막으로 추상적인 팩토리 패턴을 통해 조합 생성이 구현됩니다.

기록 코드는 다음과 같습니다.

<?php    

  
/** Hero 
 *  定义一个英雄接口 
 */  
interface Hero  
{  
    function CreateHero();  
}  
  
/** GuanYu 
 *  关羽英雄类 
 */  
Class GuanYu implements Hero  
{  
    function CreateHero()  
    {  
         echo "关羽加入战场-->";  
    }   
}  
  
/** LiuBei 
 *  刘备英雄类 
 */  
Class LiuBei implements Hero  
{  
    function CreateHero()  
    {  
         echo "刘备加入战场-->";         
    }  
}  
  
  
/** Weapon 
 *  定义一个兵器接口 
 */  
interface Weapon  
{  
    function CreateWeapon();  
}  
  
/** GuanYuWeapon 
 *  青龙偃月刀的类 
 */  
Class GuanYuWeapon implements Weapon  
{  
    function CreateWeapon()  
    {  
        echo "手持青龙偃月刀-->";         
    }  
}  
  
/** LiuBeiWeapon 
 *  雌雄双剑的类 
 */  
Class LiuBeiWeapon implements Weapon  
{  
    function CreateWeapon()  
    {  
        echo "手持雌雄双剑-->";          
    }  
}  
  
  
/** Horse 
 *  定义一个坐骑接口 
 */  
interface Horse  
{  
    function CreateHorse();  
}  
  
/** ChiTu 
 *  赤兔马类 
 */  
Class ChiTu implements Horse  
{  
    function CreateHorse()  
    {  
        echo "脚蹬赤兔马。";    
    }  
}  
  
/** DiLu 
 *  的卢马类 
 */  
Class DiLu implements Horse  
{  
    function CreateHorse()  
    {  
        echo "脚蹬的卢马。";    
    }     
}  
  
/** AbstractFactory 
 *  抽象工厂接口  为子类建立标准 
 *  LoadingHero   加载人物类方法 
 *  LoadingWeapon 加载武器类方法 
 *  LoadingHorse  加载坐骑类方法 
 */  
interface AbstractFactory  
{  
    function LoadingHero();  
    function LoadingWeapon();  
    function LoadingHorse();  
}  
  
/** GFactory 
 *  关羽英雄创建工厂类  用于客户端调用 
 */  
Class GFactory implements AbstractFactory  
{  
    function LoadingHero()  
    {  
        return new GuanYu();  
    }  
    function LoadingWeapon()  
    {  
        return new GuanYuWeapon();  
    }  
    function LoadingHorse()  
    {  
        return new ChiTu();  
    }          
}  
  
/** LFactory 
 *  刘备英雄创建工厂类  用于客户端调用 
 */  
Class LFactory implements AbstractFactory  
{  
    function LoadingHero()  
    {  
        return new LiuBei();  
    }  
    function LoadingWeapon()  
    {  
        return new LiuBeiWeapon();  
    }  
    function LoadingHorse()  
    {  
        return new DiLu();  
    }     
}
<?php   
  
// 抽象工厂模式  index.php    
header("Content-Type:text/html;charset=utf-8");  
  
require_once "AbstractFactory.php";  
  
echo "-----------------创建第一个英雄-----------------<br/>";  
$GY = new GFactory(); // 调用第一个英雄的工厂  
  
// 加载各自的创建方法  
$GYHero = $GY->LoadingHero();  
$GYWeapon = $GY->LoadingWeapon();  
$GYHorse = $GY->LoadingHorse();  
  
// 生成加入战场  
$GYHero->CreateHero();  
$GYWeapon->CreateWeapon();  
$GYHorse->CreateHorse();  
  
echo "<br/>";  
  
echo "-----------------创建第二个英雄-----------------<br/>";  
$LB = new LFactory(); // 调用第一个英雄的工厂  
  
// 加载各自的创建方法  
$LBHero = $LB->LoadingHero();  
$LBWeapon = $LB->LoadingWeapon();  
$LBHorse = $LB->LoadingHorse();  
  
// 生成加入战场  
$LBHero->CreateHero();  
$LBWeapon->CreateWeapon();  
$LBHorse->CreateHorse();

출력 결과:

------첫 번째 영웅 생성--------- -- -------

관우가 전장에 합류합니다 --> 청룡 연월검을 들고 -->
------두 번째 영웅 만들기------
유비가 전장에 합류합니다- - >수컷과 암컷 검을 모두 들고 -->페달을 밟는 루마.
관련 추천:


PHP 디자인 패턴 팩토리 메소드

PHP 디자인 패턴 심플 팩토리


위 내용은 PHP 디자인 패턴 추상 공장의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.