[写経] PHPで学ぶデザインパターン01
|
— 注意 —
PHPによるデザインパターンの写経ですが、まんま書くと問題があるのでアウトプットとして備忘録メモです
初心者には分かりやすくて良い本なので、是非本屋でチェックして下さい。
URL : http://www.amazon.co.jp/PHPによるデザインパターン入門-下岡-秀幸/dp/4798015164
PHPによるデザインパターン入門
まずは基本のテンプレートメソッド
生成 + オブジェクト
オブジェクト指向の基本です。
クラスの親子関係でテンプレートとなる親クラスのメソッドをオーバーライドして子クラスへ継承させるパターンです。
親クラスの定義
名前と年齢の変数を定義してコンストラクタで設定します。
子でオーバーライドさせるテンプレートメソッドを1つ定義しています。
*意図的にfunctionをabstract定義にしていません。
/* Abstractクラス */ abstract class AbstractClass { //名前 protected $name; //年齢 protected $age; //コンストラクタ public function __construct($name,$age) { $this->name = $name; $this->age = $age; } //情報表示(template method) public function displayInfo() { print "Name : {$this->name},Age : {$this->age}\r\n"; } }
子クラス日本人の定義
親クラスをextendsしてテンプレートメソッドをオーバーライドします。
日本人クラスなので日本語で自分の情報を表示しています。
/* 日本人クラス */ class Japanese extends AbstractClass{ //情報表示 public function displayInfo() { print "私の名前は{$this->name}です。\r\n"; print "私の年齢は{$this->age}です。\r\n"; } }
子クラスアメリカ人の定義
親クラスをextendsしてテンプレートメソッドをオーバーライドします。
アメリカ人クラスなので英語語で自分の情報を表示しています。
/* アメリカ人クラス */ class American extends AbstractClass{ //情報表示 public function displayInfo() { print "I'm {$this->name}.\r\n"; print "{$this->age} years old.\r\n"; } }
使ってみる
それぞれのクラスをnewしてオーバーライドしたテンプレートメソッドを使ってみましょう。
/* 使ってみる */ $japanese = new Japanese("浜田人志",30); $japanese->displayInfo(); $american = new American("William Bradley Pitt",20); $american->displayInfo();
ターミナルから確認します。
$php templateMethod.php 私の名前は浜田人志です。 私の年齢は30です。 I'm William Bradley Pitt. 20 years old.
なんてこと無いですね。