Bir kullanıcı yirmi ya da otuz benzersiz strateji nesneleri listeden dört stratejileri seçer bir strateji deseni oluşturmak gerekir. Proje olgunlaştıkça gibi stratejilerin listesi genişletilmiş olacak, ve kullanıcıların herhangi bir zamanda onların seçilmiş stratejisini değiştirebilir.
Ben onlar dizeleri olarak seçmiş strateji adlarını saklamak ve daha sonra seçilen dizeleri karşılık strateji sınıfları yüklemek için bu gibi bir yöntemi kullanmayı planlıyor.
class StrategyManager { // simplified for the example
public $selectedStrategies = array();
public function __construct($userStrategies) {
$this->selectedStrategies = array(
'first' => new $userStrategies['first'],
'second' => new $userStrategies['second'],
'third' => new $userStrategies['third'],
'fourth' => new $userStrategies['fourth']
);
}
public function do_first() {
$this->selectedStrategies['first']->execute();
}
public function do_second() {
$this->selectedStrategies['second']->execute();
}
public function do_third() {
$this->selectedStrategies['third']->execute();
}
public function do_fourth() {
$this->selectedStrategies['fourth']->execute();
}
}
Ben büyük bir switch deyimi önlemek için çalışıyorum. Benim endişem, bu tür Stringly Typed
a> gibi görünüyor olmasıdır. Koşullu veya büyük bir switch deyimi kullanmadan bu hedefi gerçekleştirmek için daha iyi bir yolu var mı?
BTW: Dört stratejilerini seçerken kullanıcı girişi bir dize yok. Ben bir seçin kutusunda kullanıcıya sunmak için dizeleri bir listesini tutmak gerekiyor ve ben yeni bir strateji nesneler eklemek olarak listeye yenilerini eklersiniz.
Explanation
ircmaxell expressed a bit of confusion regarding what it is I'm trying to do. In the above example, the user has selected four strategies from a list, and they are passed to the StrategyManager constructor as an array of strings. The corresponding strategy objects are created and stored in an internal array, $this->selectedStrategies
"Birinci", "ikinci", "üçüncü" ve "dördüncü" dört farklı seçilen stratejileri için iç dizinin dizi anahtarları. StrategyManager nesne inşa edildikten sonra, uygulama, işlemin süresi boyunca, çeşitli anlarda dört stratejilerin execute
yöntemini kullanır.
Yani, özetle ... her zaman başvuru Strateji sayısının yöntemini çalıştırmak için "tek" bunu yapar ihtiyacı ve sonuç Stratejisi "one" için kullanıcı tarafından seçilen ne stratejisi bağlı olarak farklı