|
オブジェクト指向についてはまだまだ勉強中ですが、「PHPでGoFのデザインパターンを実装したら、どんな感じになるんだろ?」と思ってしまったので、ちょっとずつやってみることにしました。
間違いやご意見がありましたら、遠慮なくツッコミを入れてくださいm(_"_)m
今回は、Facadeパターンで「APIをシンプルにする」パターンです(以下のクラス図を参照)。
今回のサンプルは、とあるユーザー一覧を出力するものでクライアントからの呼び出しが1行で済んでしまう、というものです。
以下がサンプルコードで、動作確認はPHP4.3.0です。
これだとあまり実感が湧かないですが、より多くのクラス・メソッドを使用して複雑な処理を行う場合、クライアント側にその複雑さを意識させたくない場合があります。Facadeパターンでは、シンプルなAPIを提供することで、複雑さを隠蔽しています。
●Facade.php
<?php
class Database
{
function Database() {}
function getData()
{
return array("SCOTT" => "oracle1",
"TIGER" => "oracle2",
"SMITH" => "oracle3",
"広島県人@埼玉在住" => "Do You PHP?");
}
}
class PageWriter
{
function PageWriter() {}
function writeTitle($title)
{
echo "$title";
}
function writeTable($data)
{
echo "<table border=\"1\">";
foreach($data as $name => $title) {
echo "<tr><th>$name</th><td>$title</td></tr>";
}
echo "</table>";
}
}
class PageMaker
{
function PageMaker() {}
function makeUserList($title)
{
$list = Database::getData();
$pw = new PageWriter();
$pw->writeTitle($title);
$pw->writeTable($list);
}
}
?>
<?php
PageMaker::makeUserList("Facadeパターンのテストです");
?>
|