cheka.jp 超不定期で更新する写真達。お口直しにどうぞ。

[写経] 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.

なんてこと無いですね。

Add a Comment

メールアドレスが公開されることはありません。