|
オブジェクト指向についてはまだまだ勉強中ですが、「PHPでGoFのデザインパターンを実装したら、どんな感じになるんだろ?」と思ってしまったので、ちょっとずつやってみることにしました。
間違いやご意見がありましたら、遠慮なくツッコミを入れてくださいm(_"_)m
今回は、Strategyパターンで、「アルゴリズムをごっそり入れ替える」パターンです(以下のクラス図を参照)。
今回のサンプルは、log4j風ログ出力クラスです。この場合、Log4pクラスのgetInstanceメソッドに出力処理の種類を渡し、ConcreteStrategyに相当するオブジェクトを作成しています。また、作成するオブジェクトのPHPファイルのみをinclude_once関数を使って読み込んでいます。
●Log4p.phlの抜粋
<?php
:
class Log4p extends Object
{
:
function &getInstance($mode = LOG_INFO, $type = "html")
{
static $singleton_;
if ($singleton_ == null) {
$singleton_ = new Log4p();
$singleton_->init($mode, $type);
}
return $singleton_;
}
:
function init($mode, $type)
{
:
$concrete = "Log" . ucfirst($type) . "Output";
$inc_file = $concrete . ".phl";
if (@!include_once(CLASSPATH_LOG4P . $inc_file)) {
return false;
}
if ($mode >= LOG_FATAL) {
$this->fatal_ = new $concrete("FATAL");
:
}
:
}
?>
実は、自分自身も気付いてなかっただけです。。。(^-^;
|