PHP 설계 모드 - 공장 모드의 단순한 공장 모드

5585 단어

정의:


단순 공장 모델: 호출자와 창설자를 분리하여 결합을 실현하고 호출자는 직접 공장에 요청한다. 공장을 통해 실례화가 필요한 대상을 선택하고 하나의 단독 클래스로 이 창설 실례를 만드는 과정을 한다.
 

코드 인스턴스:


문제: 개인 사무 관리에 관한 프로젝트에 여러 가지 유형의 대상이 있는데 그 중 하나가 Appointment 대상이라고 가정하면 지금은 BlogggsCal이라는 형식을 통해 예약 데이터의 상호작용을 해야 한다.MegaCal 형식과 같은 더 많은 데이터 형식을 처리해야 할 수도 있습니다.
1. 추상 클래스 ApptEncoder 만들기
/**
 *  
 * Class ApptEncoder
 */
abstract class ApptEncoder
{
    abstract public function encode();
}

2. BloggsCal 형식 처리 클래스 만들기
/**
 * BloggsCal  
 * Class BloggsApptEncoder
 */
class BloggsApptEncoder extends ApptEncoder
{
    public function encode()
    {
        // TODO: Implement encode() method.
        return "Appointment data encoded in BloggsCal format
"; } }

3. MegaCal 형식 처리 클래스 만들기
/**
 * MegaCal  
 * Class MegaApptEncoder
 */
class MegaApptEncoder extends ApptEncoder
{
    public function encode()
    {
        // TODO: Implement encode() method.
        return "Appointment data encoded in MegaCal format
"; } }

4, 플랜트 클래스 CommsManager 생성
/**
 *  
 * Class CommsManager
 */
class CommsManager
{
    const BLOGGS = 1;
    const MEGA = 2;
    private $model;

    /**
     * CommsManager constructor.
     * @param $model
     */
    public function __construct($model)
    {
        $this->model = $model;
    }


    /**
     *  
     */
    public function getApptEncoder()
    {
        switch ($this->model) {
            case (self::BLOGGS):
                return new BloggsApptEncoder();
            default:
                return new MegaApptEncoder();
        }
    }
}

5. 호출:
$man = new CommsManager(CommsManager::BLOGGS);
print $man->getApptEncoder()->encode();
$man = new CommsManager(CommsManager::MEGA);
print $man->getApptEncoder()->encode();

6. 결과:
Appointment data encoded in BloggsCal format
Appointment data encoded in MegaCal format

만약에 뒤에 포맷 처리가 필요하다면 상응하는 포맷 처리 클래스를 추가하고 공장 클래스에 상응하는 실례화 호출을 추가하면 된다.
 

요약:


단순 공장 모델의 가장 큰 장점은 공장 유형에 필요한 논리적 판단을 포함하고 클라이언트의 선택 조건에 따라 동적 실례화와 관련된 클래스는 클라이언트에게 구체적인 제품과의 의존을 제거한다.하지만 아까도 말했듯이 포맷 처리를 추가하면 공장류를 수정해야 한다.확장뿐만 아니라 수정에도 개방돼 개방-폐쇄원칙에 어긋난다는 뜻이다.이때 공장 방법 모드를 사용할 수 있다.

좋은 웹페이지 즐겨찾기