元のリンク: http://www.cnblogs.com/siqi/archive/2012/09/09/2667562.html
1. シングルトン モード
1. PHPのアプリケーションは主に
/**
* デザインパターンのシングルトンモード
* $_instance は静的プライベート変数として宣言する必要があります
* コンストラクターは、新しいクラスからの外部プログラムを防ぐためにプライベートとして宣言する必要があり、これによりシングルトンの意味が失われますモード
* getInstance () メソッドは public に設定する必要があり、インスタンスへの参照を返すにはこのメソッドを呼び出す必要があります
* :: 演算子は静的変数と静的関数にのみアクセスできます
* 新しいオブジェクトはメモリを消費します
*使用シナリオ: 最も一般的に使用される場所はデータベース接続です。
* シングルトン パターンを使用してオブジェクトを生成した後、そのオブジェクトは他の多くのオブジェクトで使用できます。
*/
class man
{
//この属性にインスタンスを保存します private static $_instance;
// コンストラクターはプライベートとして宣言されており、オブジェクトの直接作成を防止する private function __construct()
';
} //
シングルケースメソッド public static function get_instance() (self::$_instance
));
if(!isset(自分: :$ _instance))
return
self ::$ _instance この書き方は、コンストラクターが private として宣言されているため失敗します//$test = new man;//以下は Example クラスの Singleton オブジェクトを取得します
$test
= man::get_instance(); $test = man::get_instance();
$test
->test();// コピーされたオブジェクトは E_USER_ERROR になります。
//$test_clone = clone $test;
2. 単純なファクトリパターン
①抽象基本クラス: サブクラスで実装するために使用されるいくつかの抽象メソッドをクラス内に定義します
②抽象から継承するサブクラスベースクラス: 基本クラスに抽象メソッドを実装します
③ファクトリクラス: 対応するすべてのサブクラスをインスタンス化するために使用されます
オブジェクト指向の継承機能を使用すると、「べき乗」、「平方根」、「対数」、「三角関数」、「統計」などの元のプログラムを簡単に拡張できます。不要なコードをロードしています。 ここで残りのクラスを追加する必要がある場合、それは非常に簡単です 別のクラスを作成し(このクラスは仮想基本クラスを継承します)、クラス内の対応する関数を完了するだけです(例: find電力操作)、および将来のメンテナンスと拡張を促進するカップリングの程度を大幅に削減します。
このモードに関するその他の注意事項: ファクトリーモード: 3. オブザーバー パターン オブザーバー パターンは、オブジェクト間の 1 対多の依存関係を定義する動作パターンです。変更されると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます。観察者オブジェクトと観察対象物を完全に分離します。プリンシパルに関係する依存関係 (オブザーバー) のリストは、別のオブジェクト (プリンシパル) に保持できます。 すべてのオブザーバーに共通のオブザーバー インターフェイスを個別に実装して、プリンシパル オブジェクトと依存オブジェクト間の直接の依存関係を排除します。 (とにかく理解できない) 使用したspl(標準phpライブラリ)
class MyObserver1
/**
* 抽象クラスを定義し、サブクラスに継承させて実装する
class
Operation{ //
抽象メソッド 関数本体を含めることはできません
/* * * 追加クラス getValue($num1,$num2){ +$num2; } } }/**
*トラクションクラス
*/ OperationSub extends
操作{
、$num2){
*乗算クラス操作; num1,
$ num2) { {IF num2 == 0) { Throw
New 例外 (「除算を0にすることはできません」);例外
$e
){
} }
/*
* * 主にオブジェクトの作成に使用されるエンジニアリングクラス * 関数: By による操作シンボルを入力すると、工場は適切なオブジェクトをインスタンス化できます。 Factory::createObj('/');
$result=$test->getValue(23 ,0);
echo $result;
輸送を例に挙げます:輸送と輸送の生産プロセスの両方をカスタマイズできるようにしてください
1> 輸送をカスタマイズします
1.ハンドオーバー ツール (開始、実行、停止) のメソッドを含むインターフェイスを定義します
2. 航空機、自動車、その他のカテゴリにそれらを実装させます
2> カスタマイズ ファクトリ (上記と同様) 1. 定義配信ツールの製造メソッド (開始、実行、停止) が含まれています
2. このインターフェイスを継承して実装するために、航空機と自動車をそれぞれ製造するためのファクトリ クラスを作成します
function update(SplSub)ジェクト $サブジェクト ) {C echo _______
。 '-' $ SUBJECT- & GT; Tionp Update (splsubject $ $ Subject{) $ SUBJECT-> vate $_observers
;
public function __construct($name
) { $this -> _observers = newSpl ObjectStorage();
$this->_name = $name; } public
function
attach(SplObserver $observer ) { $this
-> ;_observers->attach($observer ); }
public function detach(SplObserver $observer
) { $this->_observers->detach($)観察者) ; notify() {
foreach ($this->_observers
as $observer) {
public
function getName() { return $this
- > _name;}}$observer1
=
newmyobserver1();$observer2=newmyobserver2();
$subject->attach($observer1);
$subject->attach($observer2);
参考原文: http://www.php.net/manual/zh/class.splsubject.php
4. 戦略モード
このモードでは、アルゴリズムが複雑なクラスから抽出するため、簡単に置き換えることができます。たとえば、検索エンジンでのページのランク付け方法を変更したい場合は、戦略モードが適しています。検索エンジンの各部分について考える ——1 つのパートはページを横断し、1 つのパートはページごとにソートし、もう 1 つのパートは配置の結果に基づいてソートします。複雑な例では、これらのパーツはすべて同じクラスに属します。 Strategy パターンを使用すると、配置部分を別のクラスに配置して、検索エンジンのコードの残りの部分に影響を与えることなく、ページの配置方法を変更できます。
より簡単な例として、以下に示す User List クラスは、 一連のプラグアンドプレイ ポリシー
を検索する方法を提供します。
//インターフェースを定義するinterface IStrategy {