スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【PHP】デザインパターン::Compositeパターン(前回の記事の反省)

前回Compositeパターンについて書いたのですが、少し勘違いしていました。

どうやらCompositeパターンの特徴は大きなクラスを分割して分かりやすくするだけではないらしいです。

特徴をいくつか整理してみました。

1.「容器と中身を同一視する」ことで、再帰的な構造の取り扱いを容易にする
2. 再帰的な構造をクラスで表現するためのパターン

よく使われる例として「ディレクトリとファイルの関係」「葉と木の関係」があるらしいです。

結構勘違いしてましたね。。。

今回も理解を深めるために少しコードをかいてみました。

今回やってみるのはXMLの構成みたいなものです。

XMLも大きく分けてタグのノードと、テキストのノードで構成されてる気がして今回の例を書いてみるにはちょっと適した題材では?とおもいました。

本当にちょっとした概念的なことしかここでは書きません。本格的にXMLを扱うのが目的ではないからです。

<?php
abstract class Node{
    protected $nodeName;
    protected $nodeValue;

    public function __construct($nodeName){
        $this->nodeName = $nodeName;
    }  

    public function getName(){
        return $this->nodeName;
    }  

    abstract public function setValue($nodeValue);
};

class Tag extends Node{

    public function __construct($nodeName){
        parent::__construct($nodeName);
        $this->nodeValue = array();
    }  

    public function setValue($nodeValue){
        $this->nodeValue[$nodeValue->getName()] = $nodeValue;
    }  
};

class Text extends Node{

    public function __construct($nodeName){
        parent::__construct($nodeName);
        $this->nodeValue = '';
    }  

    public function setValue($nodeValue){
        $this->nodeValue = $nodeValue;
    }
}

//1番上の階層
$root  = new Tag('Root');
//2番目の階層
$value = new Tag('Value');

//3番目の階層
$text  = new Text('text');
$text->setValue('hogehoge');
//2番目の階層にくっつける
$value->setValue($text);

//3番目の階層その2
$text2 = new Text('text2');
$text2->setValue('hogehoge2');
//2番目の階層にくっつける
$value->setValue($text2);

// 3番目の階層その3
$value2 = new Tag('Value2');
//4番目の階層としてさっきのhogehogeを3番目の階層その3にくっつける
$value2->setValue($text);
// 2番目の階層にくっつける
$value->setValue($value2);

$root->setValue($value);
var_dump($root);
?>

一度勘違いしてるだけにこの認識で間違いないのかちょっと心配ですが。
書き残しておきます。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。