PHPでデザインパターン 〜Strategy パターン〜
Strategy パターン
一連のアルゴリズムを定義し、それぞれをカプセル化してそれらを交換可能にする。
これによって、アルゴリズムを使用するクライアントとは独立して、アルゴリズムを変更できる
コード
<?php abstract class Bird { protected $name; protected $fly; protected $sing; public function __construct(){ } public function fly(){ $this->fly->fly(); } public function sing(){ $this->sing->sing(); } public function status(){ echo $this->name . " の状態:\n"; $this->fly(); $this->sing(); } } interface Fly { public function fly(); } class FlySlowly implements Fly { public function fly(){ echo "ゆっくり飛んでいます\n"; } } class FlyFast implements Fly { public function fly(){ echo "速く飛んでいます\n"; } } interface Sing { public function sing(); } class SingLoud implements Sing{ public function sing(){ echo "うるさく鳴いています\n"; } } class SingSilently implements Sing{ public function sing(){ echo "鳴いていません\n"; } } class Crow extends Bird { public function __construct(){ $this->fly = new FlyFast(); $this->sing = new SingLoud(); $this->name = "カラス"; } } class Robin extends Bird { public function __construct(){ $this->fly = new FlySlowly(); $this->sing = new SingSilently(); $this->name = "こまどり"; } } class Pigeon extends Bird { public function __construct(){ $this->fly = new FlySlowly(); $this->sing = new SingLoud(); $this->name = "鳩"; } } $crow = new Crow(); $robin = new Robin(); $pigeon = new Pigeon(); $crow->status(); $robin->status(); $pigeon->status();