0
이 코드에서는 인터페이스 대신 추상 클래스를 사용하는 것이 더 좋으며 현재와 같이 좋은 것인가? 그렇다면 왜?PHP는 추상 클래스 또는 인터페이스를 사용합니까?
/** contract for all flyable vehicles **/
interface iFlyable {
public function fly();
}
/* concrete implementations of iFlyable interface */
class JumboJet implements iFlyable {
public function fly() {
return "Flying 747!";
}
}
class FighterJet implements iFlyable {
public function fly() {
return "Flying an F22!";
}
}
class PrivateJet implements iFlyable {
public function fly() {
return "Flying a Lear Jet!";
}
}
/** contract for conrete Factory **/
/**
* "Define an interface for creating an object, but let the classes that implement the interface
* decide which class to instantiate. The Factory method lets a class defer instantiation to
* subclasses."
**/
interface iFlyableFactory {
public static function create($flyableVehicle);
}
/** concrete factory **/
class JetFactory implements iFlyableFactory {
/* list of available products that this specific factory makes */
private static $products = array('JumboJet', 'FighterJet', 'PrivateJet');
public static function create($flyableVehicle) {
if(in_array($flyableVehicle, JetFactory::$products)) {
return new $flyableVehicle;
} else {
throw new Exception('Jet not found');
}
}
}
$militaryJet = JetFactory::create('FighterJet');
$privateJet = JetFactory::create('PrivateJet');
$commercialJet = JetFactory::create('JumboJet');
이것은 아마도 codereview.stackexchange 더 적합 .com –
이것도 대부분 의견 수렴이 될 것이지만 한 가지 의견 (대답이 아닌)을 줄 것입니다. 나는 당신의 모범이 어떤 것이 더 좋을지 결정하기에는 너무 단순하다고 생각합니다. 예를 들어 특정 상황에서만 오버 라이딩 동작으로 코드 재사용 (예 : 고도 변경, 표제 변경, 이륙, 육지 변경)이 가능한 모든 비행 수단에 대해 공통적 인 동작이있는 경우 추상 클래스가 인터페이스보다 바람직합니다. –