私は、プログラマーにとって、フレームワーク、バージョン、さらには言語さえも実際には重要ではないといつも感じています。特に高度なフレームワークや新しく珍しい言語をマスターすることは、実際には問題ではありません。時間を過ごしたい、誰もがそう思います。したがって、基本的なもの、つまりアルゴリズムとデータ構造、そして優れた設計パターンが特に重要です。
シングルトンモードの特徴
$_instanceは静的プライベート変数として宣言する必要があります
コンストラクターとクローン関数はプライベートとして宣言する必要がありますこれは、外部プログラムがシングルトンを失うことを防ぐためです。例のパターンの意味
getInstance() メソッドは public として宣言する必要があり、一意のインスタンスへの参照を返すためにこのメソッドを呼び出す必要があります
::operator は静的変数にのみアクセスできます。または静的関数
PHP PHP の解釈および実行メカニズムにより、各 PHP ページが解釈および実行された後にすべての関連リソースがリサイクルされるため、シングルトン モードは相対的です。
<?php header("Content-type: text/html; charset=utf-8"); class single{ public static $arr=array('host'=>'XXX','user'=>'XXX','password'=>'XXX'); private static $_instance =null; private function __construct(){} private function __clone(){} static public function getInstance(){ if(self::$_instance== null || isset(self::$_instance)){ self::$_instance= new self; } return self::$_instance; } public function showSomething(){ return self::$arr; } } /////////////////////test/////////////// $a=single::getInstance(); print_r(single::getInstance()->showSomething()); ?>
ファクトリ パターン
ファクトリ クラスは、他のオブジェクトを作成するために特別に使用されるクラスです。ファクトリ クラスは、ポリモーフィック プログラミングの実践において非常に重要です。これにより、クラスの動的な置換や構成の変更が可能になり、アプリケーションがより柔軟になります。ファクトリ パターンを習得することは Web 開発にとって不可欠です。
特徴:
ファクトリ パターンは通常、インターフェイスに似たさまざまなクラスを返すために使用されます。ファクトリの一般的な用途は、多態性プロバイダーを作成することです。
通常、ファクトリ パターンにはキー構造があり、これは一般にファクトリという名前の静的メソッドです。この静的メソッドは任意の数のパラメータを受け入れることができ、オブジェクトを返す必要があります。
ファクトリ パターンはさらに次のように分類されます:
シンプル ファクトリ
ファクトリ メソッド
抽象ファクトリ
シンプル ファクトリ パターン: 同じ階層構造で任意の製品を生産するために使用されます。新しい製品の追加については何もできません
ファクトリー モード: 同じ階層構造で固定された製品を生産するために使用されます。 (任意の製品の追加をサポート)
抽象ファクトリー: さまざまな製品ファミリーのすべての製品を生産するために使用されます。 (新しい製品の追加については何もできません。製品ファミリーの追加をサポートしてください)
<?php //简单工厂模式 header("Content-type: text/html; charset=utf-8"); class simpale{ public function calculate($num1,$num2,$operator){ try { $result=0; switch ($operator){ case '+': $result= $num1+$num2; break; case '-': $result= $num1-$num2; break; case '*': $result= $num1*$num2; break; case '/': if ($num2==0) { throw new Exception("除数不能为0"); } $result= $num1/$num2; break; } return $result; } catch (Exception $e){ echo "您输入有误:".$e->getMessage(); } } } //工厂方法模式 interface people { function jiehun(); } //定义接口 class man implements people{ public $ring=null; public $car=null; public $house=null; public function getAllthing(){ $this->ring='10000'; $this->car='100000'; $this->house='1000000'; } public function jiehun() { if($this->ring && $this->car && $this->house) echo '我可以结婚了<br>'; else echo '我是臭屌丝,还不能结婚<br>'; } } class women implements people { public $face='ugly'; public function getAllthing(){ $this->face='nice'; } public function jiehun() { if($this->face =='nice') echo '我可以结婚了<br>'; else echo '我是臭屌丝,还不能结婚<br>'; } } interface createpeople { // 注意了,这里是工厂模式本质区别所在,将对象的创建抽象成一个接口。 public function create(); } class FactoryMan implements createpeople{ public function create() { return new man; } } class FactoryWomen implements createpeople { public function create() { return new women; } } class Client { // 简单工厂里的静态方法 public function test() { $Factory = new FactoryMan; $man = $Factory->create(); $man->jiehun(); $Factory = new FactoryWomen; $woman = $Factory->create(); $woman->getAllthing(); $woman->jiehun(); } } /////////////test//////////// $f = new Client; $f->test(); //抽象模式就是在工厂模式下接口中添加相应的不同方法即可 ?>
戦略パターン
戦略パターンはオブジェクトの動作パターンであり、一連のアルゴリズムをカプセル化することを目的としています。必要なアルゴリズムを動的に選択して使用します。
戦略パターンとは、プログラムにおける意思決定制御に関わるパターンを指します。この設計パターン自体の核となるアイデアはオブジェクト指向プログラミングのポリモーフィックなアイデアであるため、戦略パターンは非常に強力です。
戦略パターンの 3 つの特徴:
抽象ロール クラスの定義 (実装ごとに共通の抽象メソッドを定義)
特定の戦略クラスの定義 (親クラスの共通メソッドを具体的に実装)
環境ロール クラスの定義 (プライベート化された宣言の抽象化) ロール変数、オーバーロードされたコンストラクター メソッド、抽象メソッドの実行)
<?php abstract class baseAgent { //抽象策略类 abstract function PrintPage(); } //用于客户端是IE时调用的类(环境角色) class ieAgent extends baseAgent { function PrintPage() { return 'IE'; } } //用于客户端不是IE时调用的类(环境角色) class otherAgent extends baseAgent { function PrintPage() { return 'not IE'; } } class Browser { //具体策略角色 public function call($object) { return $object->PrintPage (); } } ///////////////test//////////////// $bro = new Browser (); echo $bro->call (new ieAgent );
関連する推奨事項:
PHP デザイン パターンの組み合わせパターンとケースの共有
PHP で一般的に使用されるデザイン パターン 概要と使用例
以上がさまざまな PHP 設計パターンの簡単な実践例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。