デザインパターンを見直す

 ここ数ヶ月の知識のおさらいをしてみた。


 サイト名:ギコ猫デザインパターン
 URL:http://www.hyuki.com/dp/cat_index.html


 6月頃は読んでも全くわかりませんでしたが、今日読むといくつかは意味を理解した上で笑えたよー。


 ちょっと言ってやりたい事もありまして、PHPでシングルトンが不可能ですって?
 僕が前に書いたときに1Session上で可能とすると明記したの読み落としているのか理解していないのか、はたまた読まずにまた聞きしたのか。
 もしあなたがJavaユーザでGOF提唱のデザインパターンの「よくあるモデル」を知っていて、PHP4のclassの仕様やstaticの事を考えて言ってるのだとしたら、あなたはきっと「よくあるモデル」しか知らず、更にそれを使っているだけで理解していないのではないでしょうか。
 オブジェクト指向にしてもそうでしょう。あれは指向する思想であって、JavaC++や他オブジェクト指向言語と呼ばれるものじゃないと出来ないわけじゃない。
 デザインパターンも同じようなことなんじゃない?


/* Java Sample*/

public class TargetObjectClass implements InterfaceClass {
    private static TargetObjectClass _me = null;
    private TargetObjectClass(){
    }
    public static TargetObjectClass getInstance() {
        if (_me == null) {
            _me = new TargetObjectClass();
        }
        return _me;
    }

}



 これがPHP4で


/* PHP Sample A */

class TargetObjectClass {
    var $me = null;
    function getInstance(){
        if ($this->me == null) {
            $this->me = new TargetObjectClass();
        }
        return $this->me;
    }
}



 とかって書いてたらそりゃナンセンスだ。
 こうれしか思いつかなかったとか言うなら、それがあなたの限界なら一生コーダなり平PGなりやってるしかないよ? 下手にSE名乗ったら下につく人間が不幸になるからやめておき。
 これも思想です。
 シングルトンっていう書き方があるのじゃなく、考え方があるんだってことをまず踏まえてこうやってみるのはどう?


/* PHP Sample B */

class FactoryClass {
    var $targetObjectClass = null;
    function getTargetObjectClass(){
        if ($this->targetObjectClass == null) {
            $this->targetObjectClass = new TargetObjectClass();
        }
        return $this->targetObjectClass;
    }
}



 このFactoryClassのインスタンスをセッションにぶち込んでおいて、それを使えば良いんじゃないの?
 回りくどい事せずにTargetObjectClassをセッションにぶち込んだらとか言い出したら、今度はオブジェクト指向の利点やなんやから話直さないとけなくなるからこれで理解して下さいね?
 もちろんFactoryClassには他の多くのシングルトンにしたいclassが入っていきますよ?
 今作っているのは実際にはもっとまともにフレームワークぽいもの作ってやってるんでまんまじゃないけど、こんな感じです。
 はぁ……。あんまり色々言うとまた過激だと言われるから我慢しときます。
 そうそう、もっとまともなページも読んでますよ?
 正直、なんの意味があるのか理解出来ないものも多々ですが。
 サイト名:JavaHello World(の中のデザイナパターンのページ)
 URL:http://www.hellohiro.com/pattern/


 Zendにもこんなページ
 http://zend.com/zend/trick/tricks-app-patt-php.php
 (意味わかんねーって思ったり、センスねーって思ったりだけどね)