2016-07-13 2 views
0

Есть ли правильный способ условного экземпляра определенных подклассов?Условно создание правильных подклассов?

Например, у меня есть класс 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

Спасибо @ dean-fenster, что я думал, но не был уверен. –

 Смежные вопросы

  • Нет связанных вопросов^_^