Условно создавая правильные подклассы?

Есть ли правильный способ условно создавать определенные подклассы?

Например, у меня есть User класс, который включает метод get_membership() который вернет подкласс в зависимости от типа членства, которому он был передан. В настоящее время я использую оператор switch для возврата правильного подкласса, однако я не уверен, что это лучший подход.

Краткий пример того, с чем я работаю:

class User
{
public $user_id;
public function __construct( $user_id )
{
$this->user_id = $user_id;
}
public function get_membership( $membership_type = 'annual' )
{
switch( $membership_type )
{
case 'annual':
return new AnnualMembership( $this->user_id );
break;

case 'monthly':
return new MonthlyMembership( $this->user_id );
break;
}
}
}

abstract class UserMembership
{
protected $user_id;
protected $length_in_days;

public function __construct( $user_id )
{
$this->user_id = $user_id;
$this->setup();
}

abstract protected function get_length_in_days();
abstract protected function setup();

}

class AnnualMembership extends UserMembership
{
public function setup() {
$this->length_in_days = 365;
}

public function get_length_in_days()
{
return $this->length_in_days;
}
}

class MonthlyMembership extends UserMembership
{
public function setup() {
$this->length_in_days = 30;
}

public function get_length_in_days()
{
return $this->length_in_days;
}
}

0

Решение

Можно условно создать экземпляр правого подкласса, хотя обычно рекомендуется разделить эту логику на другой класс / метод, называемый factory. На самом деле, это очень распространенный design pattern.

0

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

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

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