Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2003/01/28

counter hits
since 1999/11/06


PHP4でデザインパターン(Facade編)

オブジェクト指向についてはまだまだ勉強中ですが、「PHPでGoFのデザインパターンを実装したら、どんな感じになるんだろ?」と思ってしまったので、ちょっとずつやってみることにしました。

caution間違いやご意見がありましたら、遠慮なくツッコミを入れてくださいm(_"_)m

今回は、Facadeパターンで「APIをシンプルにする」パターンです(以下のクラス図を参照)。

Facadeパターンのクラス図

今回のサンプルは、とあるユーザー一覧を出力するものでクライアントからの呼び出しが1行で済んでしまう、というものです。

以下がサンプルコードで、動作確認はPHP4.3.0です。

これだとあまり実感が湧かないですが、より多くのクラス・メソッドを使用して複雑な処理を行う場合、クライアント側にその複雑さを意識させたくない場合があります。Facadeパターンでは、シンプルなAPIを提供することで、複雑さを隠蔽しています。

●Facade.php

<?php
/**
 * ユーザーデータを取得するクラス
 * とりあえず、テキトーにでっち上げたArrayを返す
 */
class Database
{
    function Database() {}
    function getData()
    {
        return array("SCOTT" => "oracle1",
                     "TIGER" => "oracle2",
                     "SMITH" => "oracle3",
                     "広島県人@埼玉在住" => "Do You PHP?");
    }
}

/**
 * HTMLページを出力するクラス
 */
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>";
    }
}

/**
 * 一定の操作をまとめて行うメソッド「makeUserList」を
 * 用意している
 */
class PageMaker
{
    function PageMaker() {}
    function makeUserList($title)
    {
        $list = Database::getData();
        $pw = new PageWriter();
        $pw->writeTitle($title);
        $pw->writeTable($list);
    }
}
?>
<?php
    /**
     * main
     * 結果的にクライアント側では、1行で複雑な操作を記述する
     * ことができる
     */
    PageMaker::makeUserList("Facadeパターンのテストです");
?>



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2003 by Hideyuki SHIMOOKA all rights reserved.