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' );

0

Решение

интерфейс более гибкий. таким образом, не все, что вылетает, вынуждено наследовать от одного и того же базового класса (php не поддерживает множественное наследование)

так

class bird extends animal implements flyable
class plane extends machine implements flyable
class cloud implements flyable

иногда гибкость не желательна.

абстрактные классы также могут предоставлять определения функций, которые уменьшат дублирование кода, если несколько летающих классов требуют одного и того же метода fly ().

надеюсь, что это поможет вам понять ваш выбор

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector