ポリシーモード(strategy patterns)(一)

2991 ワード

長い間計画して、今日やっと心を静めてキーボードをたたいて、自分の好きな記号を覚えることができます.
 
皆さんがデザインモデルのメリットとデメリットについて議論している間に、私は長い間ためらっていましたが、デザインモデル、特にPHPのデザインモデルを的確に学ぶ必要があるかどうか分かりません.
それからゆっくりと接触して、ゆっくりと研究して、ゆっくりと発見して、設計のモードを勉強して、また別の収穫があります.仕事の中で私たちは使っていないかもしれませんが、設計モードを完全に意識的に避けることができて、優雅なコードを書くことができます.しかし、デザインモデルを学ぶ過程で、私はどのように問題を考え、どのようにOO思想をより徹底的に理解するかを学びました.
だから私はデザインモデルを勉強して、考えるのが好きな人と自分の学んだことを分かち合うことを決心しました.私は菜鳥で、私の英語のレベルはもっと悪いですが、私は自分が出会った良い文章をできるだけ翻訳します.また自分のものを書きます.
ネット上で多すぎる设计のモードはJAVAで実现したので、私もとてもJAVAの言语が好きで、しかし私の今従事する仕事はPHPで、PHPが好きな友达と一绪にもっと深い知识を理解したいです.
このシリーズで引用したのは海外サイトのオリジナルです.私は逐句の翻訳ではなく、自分の理解の上で、自分の言語で、もっと中国人の言語に合って解釈します.すべてのコードは私も繰り返しテストを経て、彼らが提供したコードをよりよく解釈します.
第1編は戦略モード(strategy)である.
 
ポリシー・モードは、特殊なタスク・アルゴリズムを解決するオブジェクトを定義します.
 
Introduction(紹介)
オブジェクト向けのアプリケーションでは、新しいタスクが決定されると、プログラマーの最初の反応は通常、新しいクラスを作成してそれを示すことです.しかしながら、やがて新しいクラスは多くのサブ機能(クラス)を含むようになり、各サブ機能(クラス)は元のクラスの複雑さをさらに増大させる.場合によっては、これらのサブ機能(クラス)の多くは切り替えることができるかもしれません.ロガークラスの例を挙げると、本来ロガークラスは1つのフォルダにログ情報を書くために使用されています.その後、ファイルやDatebaseなど、他の多くの場所に記録できるように機能を拡張する可能性があります.追加の必要性は、例えばa simple String、XML、serialised data、またはHTMLなどの書き込み情報のフォーマットを異なる方法で許可することもできる.
クラスには、ログの記録と2つのユニークなサブ機能、レコードの内容のフォーマットと指定された場所への記録という主要なタスクがあります.各サブ機能には多くの異なる実装があります.戦略モデルはクラス構造を実現する手段を提案し、この手段はプログラマーが柔軟な構造拡張を実現する中でいくつかの普遍的な欠陥に遭遇することを避けることができ、同時にプログラマーがこのような柔軟性を制御することができ、将来の構造の拡張を容易にすることを助けることができる.さらに、ポリシー・モードは、単純なサブクラスよりも強力なクラスを構築する方法を示します.
最も核心的で、非常に簡単なのは私たちのLogger類です.いずれにしても、Loggerクラスを再構築し、拡張するには、簡単なインタフェースを維持する必要があります.PHP 5は、インタフェースを強制的に実行する能力を提供する.それは簡単に1つのインタフェースだけを作成して、すべての可能性のある特定の実装Loggerクラスを必要とするようにすることができます.
 
Phpコード
  • interface iWriter {  
  •    
  •     public function write();  
  •    
  • }  


  •  
    インタフェースを説明するのにあまり時間を費やす必要はありません.すべての実装インタフェースのクラスは、インタフェース内のすべての定義方法を実装する必要があります.もしなかったら致命的な間違いがあります.iLoggerではなくiWriterインタフェースを定義し、後でより一般的な説明と他のクラスに繰り返し使用する可能性があります.
    インタフェースを定義したら、Loggerクラスに再度アクセスしましょう.私たちの最も原始的なLoggerクラスはこう見えるかもしれません.
    Phpコード
  • class Logger {  
  •    
  •     private $file = null;  
  •    
  •     public function __construct($file) {  
  •         $this->file = $file;  
  •     }  
  •    
  •     public function write($message) {  
  •         file_put_contents($this->file, array(PHP_EOL, $message), FILE_APPEND);  
  •     }  
  •    
  • }  

  • このクラスはとても簡単です.ローカルのファイルをインスタンス化してlog情報を格納します.Logger::write()が呼び出されると、設定したファイルが開き、$messageパラメータ値がファイルの最後に加算されます.
    その使用は非常に簡単です.
    Phpコード
  • $logger = new Logger('./tmp/mylog.txt');  
  • $logger->write('This is a log message!');  

  •  
    現在のファイルの下にtmpファイルを作成し、tmpファイルの下にmylogを作成する必要がある.txt
    以上は日記を記録する方法で、次にそれを拡張します.他の実装クラスに影響を与えることなく、ポリシー・モードを使用して簡単な拡張を実現します.
    未完待機・・・
    転載先:https://www.cnblogs.com/sharePHP/archive/2010/11/21/1883082.html