2010-08-21 4 views
0

"PickupPoints"에 대한 인터페이스를 만들고 있습니다. 각 픽업 지점은 발견 된 모든 픽업 지점과 픽업 지점 세부 정보를 반환 할 수 있어야합니다. 어쩌면 미래에 더 많은 정보를 얻을 수 있습니다. 즉 아래의 코드 괜찮다 :PHP에서 사용할 클래스를 결정하는 유형을 지정할 수있는 인터페이스 만들기

<?php 

interface iPickupPoint 
{ 
    public function getPickupPoints($countryCode, $postalCode, $city); 
    public function getPickupPointDetails($pickupPointId); 
} 


class PickupPoint1 implements iPickupPoint{ 
    ... 
} 

class PickupPoint2 implements iPickupPoint{ 
    ... 
} 

문제는 내가 PickupPoint1, PickupPoint2의 클래스를 호출 할 없다는 것입니다 .. 그들 자아. PickupPoint (PickupPointType)와 같은 클래스가 필요하므로 PickupPoint1, PickupPOint2가되어야합니다.

이 작업은 어떻게 수행 할 수 있습니까? 이것은 가능한가? 이것이 최선의 방법입니까?

+1

왜 당신은 어쨌든 자신의 클래스에 각 픽업 포인트를 가하고 있습니다 테스트하지 않았다? 그들은 그것들이 다른가요? 클래스와 인스턴스와 인터페이스를 혼동하는 것처럼 보입니다. –

+0

그들은 다른 회사의 서비스이므로 다른 데이터 소스 (웹 서비스, 데이터베이스 등)에서 데이터를 가져와야합니다. – tom

+0

아하, 설명 : 공장 출하시 기본 설정으로 이동하십시오. 더 나은 이름 지정을 제안 할 수 있습니까? :) –

답변

4

설명하는 것은 공장 패턴이므로 설명하는 것이 좋습니다.

http://www.devshed.com/c/a/PHP/Design-Patterns-in-PHP-Factory-Method-and-Abstract-Factory/

귀하의 공장 자체가 인터페이스를 구현할 필요는 없습니다.

class PickupPointFactory{ 
    public static function create($type, $options){ 
    /* your creation logic here */ 
    if(file_exists(dirname(__FILE__).'/'.$type.'.class.php')) { 
     require_once(dirname(__FILE__).'/'.$type.'.class.php'); 
     $obj = new $type($options); 
     return $obj; 
    } else { 
     throw new Exception('Unknown PickupPoint type: '.$type); 
    } 
    } 
} 

$newPoint = PickupPointFactory::create("PickupPoint2", array()); 

이 : 창조의 논리가 훨씬 더 일반적인 공장마다 시간을 변경하는 것을 방지하는 응용 프로그램에 클래스를 추가 할 수 있습니다

class PickupPointFactory{ 
    public static function create($type){ 
    /* your creation logic here */ 
    switch ($type) { 
     case "PickupPoint1" : 
     $obj = new PickupPoint1(); 
     break; 
     case "PickupPoint2" : 
     $obj = new PickupPoint2(); 
     break; 
    } 
    return $obj; 
    } 
} 

$newPoint = PickupPointFactory::create("PickupPoint2"); 

: 그것은 정적 클래스 또는 함수가 될 수있다 하나는 팩토리가있는 디렉토리에서 "PickupPoint1.class.php"라는 이름의 파일에 클래스를 생성한다고 가정하고, 클래스의 생성자는 하나의 매개 변수 만 필요로한다고 가정합니다.

이 코드 때문에 약간의 버그가 미끄러했을 수 있습니다.

+0

팩토리 메쏘드 (당신의 경우'create()')의 이름은 관습 적으로'factory()'*입니다. – takeshin

+0

나는 그 사실을 몰랐다. 이 대회를 지원하는 서지가 있습니까? –

-1

내부에 if 문을 사용하여 픽업 포인트 번호를 지정하는 픽업 포인트 기능을 만들 것입니다.

Pickup Point ($pickuppointnum) { 

    if ($pickuppointnum == 1){ 
    //Pickup Point information for Pickuppoint #1 
    } 
    elseif ($pickuppointnum ==2) { 
    //Pickup Point information for Pickuppoint #2 
    } 
} 
+1

픽업 포인트가 10 개 이상일 때 추울 수 있습니다. – tom

관련 문제