PHPのデザインパターン

WBOY
リリース: 2016-06-23 13:22:46
オリジナル
900 人が閲覧しました

シナリオ: PHP データ インターフェイスを作成し、データを XML 形式で返します。

これが私たちが通常それを書く方法です。

class Data{    private $_data = array();    public function __construct( $data ){        $this -> data = $data;    }        public function formatXml( $data ){        $xml = '<?xml version="1.0" encoding="utf-8"?>';          $xml .= '<return>';          $xml .= '<data>' .serialize($return_data). '</data>';          $xml .= '</return>';          return $xml;    }        //返回xml数据    public function getXml(){       // 怎样把数据处理成xml就不写了        return $this -> formatXml($this -> _data);    }}$data = new Data( array('title' => 'Strategy', 'language' => 'PHP')  );echo $data -> getXml();
ログイン後にコピー

それでは、今回はニーズが変わったのですが、どう対処すればよいでしょうか。最も簡単な方法は、getJson メソッドを Data クラスに追加することです。問題は解決しましたが、前に話したデザイン パターンの原則を覚えていますか? はい、それは開閉の原則に違反していました。拡張の場合は開き、変更の場合は閉じます。 Data クラスの役割は複雑すぎるため、単一責任の原則に違反しています。それから、方法を見つけなければなりません。

class Data{    private $_data = array();    public function __construct( $data ){            $this -> _data = $data;    }        //    public function getData( IFormat $format ){        $format -> formatData( $this -> _data );    }}interface IFormat{    public function formatData();}class Json implements IFormat{    public function formatData( $data ){        return json_encode( $data );    }}class Xml implements IFormat{    public function formatData( $data ){        $xml = '<?xml version="1.0" encoding="utf-8"?>';          $xml .= '<return>';          $xml .= '<data>' .serialize($return_data). '</data>';          $xml .= '</return>';          return $xml;    }}$data = new Data( array('title' => 'Strategy', 'language' => 'PHP') )$data -> getData( new Json() );  //获取Json格式$data -> getData( new Xml() );  //获取xml格式....//随便扩展
ログイン後にコピー

戦略パターン: クラス自体 (Data) には処理戦略 (formatData) が含まれておらず、異なる戦略オブジェクト (xml および Json) を呼び出して、異なる戦略アルゴリズムを実装できます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート