PHPにおける3つの基本設計モード
11748 ワード
PHPのオブジェクト向けプログラミングを学んだ以上,設計パターンを学ぶことは必然である.
先日ずっと设计モードについての教程と本を见て、私の理解する设计モードは1种の思想で、プログラミングを更に筋道があって、更に聡明になって、设计モードを学ぶことを通じて自分の不足を発见して、もとはコードはこのようにすることができます!ファクトリモード 単例モード 登録ツリーモード 1.工場モデル
工場モデルとは何か、概念だけでは理解しにくいに違いないので、コードで話します.
では、工場類を使うメリットは何でしょうか.まず、拡張性が大幅に向上しました.もし私が余剰を取る操作を追加したいなら、余剰を取るアルゴリズムクラスを1つ追加し、工場モードで他の部分を動かすことなく判断を追加する必要があります.次に、メンテナンスが容易で、もしこれが給与システムであれば、プログラマーに税金控除操作を追加させたいのですが、このモードを使用しなければ、私はすべてのコードを彼に渡す必要があります.加算操作に判断を加えるだけで、if(name=’zjp’)は100元(少なめにして、さもないと捕まえられるべきだ、冗談だ).もし私が工場モードを使ったら、彼は1つのクラスを増やすだけでいいし、大量のコードを読む必要もなく、より多くの判断を増やす必要もありません.
2.単例モード
シングル・インスタンス・モードは、データベース接続など、1つのオブジェクトのみを生成し、重複しない本番オブジェクトです.多くの接続を生産すると、リソースがかかります.この場合、シングル・インスタンス・モードを使用する必要があります.やはりコードで話します.
3.登録ツリーモード
登録ツリーモードは、オブジェクトを生成するときに、このオブジェクトを私のツリーに挿入し、このオブジェクトが必要になったら直接ツリーから抜くといいです.ここで私たちのツリーは実は2次元配列で、key値は私たちがツリーに挿入したマークで、valueはオブジェクトです.コード:
では、この3つのパターンはどのように結合されているのでしょうか.
実は簡単です.私たちがしなければならないのは、工場クラスを使用して単一のモデルのオブジェクトを生産し、木に挿入することです.
先日ずっと设计モードについての教程と本を见て、私の理解する设计モードは1种の思想で、プログラミングを更に筋道があって、更に聡明になって、设计モードを学ぶことを通じて自分の不足を発见して、もとはコードはこのようにすることができます!
工場モデルとは何か、概念だけでは理解しにくいに違いないので、コードで話します.
<?php
header('Content-Type:text/html;charset=utf-8');
/* * */
// +,-,*,/
abstruct class Operation {
abstruct public function getValue($num1, $num2);
}
//
class OperationAdd extends Operation {
// getValue()
public function getValue($num1, $num2) {
return $num1 + $num2;
}
}
class OperationSub extends Operation {
public function getValue($num1, $num2) {
return $num1 - $num2;
}
}
class OperationMut extends Operation {
public function getValue($num1, $num2) {
return $num1 * $num2;
}
}
class OperationDiv extends Operation {
public function getValue($num1, $num2) {
try {
if($num2 == 0) {
throw new Exception(" 0");
}else {
return $num1 / $num2;
}
}catch(Exception $e) {
echo $e->getMessage();
}
}
}
// , ,
class Factory {
public static function createObj($operation) {
switch($operation) {
case '+':
return new OperationAdd();
break;
case '-':
return new OperationSub();
break;
case '*':
return new OperationMut();
break;
case '/':
return new OperationDiv();
break;
}
}
}
//
$testAdd = Factory::createObj('+');
$resultAdd = $testAdd->getValue(1, 4);
echo $resultAdd;
?>
では、工場類を使うメリットは何でしょうか.まず、拡張性が大幅に向上しました.もし私が余剰を取る操作を追加したいなら、余剰を取るアルゴリズムクラスを1つ追加し、工場モードで他の部分を動かすことなく判断を追加する必要があります.次に、メンテナンスが容易で、もしこれが給与システムであれば、プログラマーに税金控除操作を追加させたいのですが、このモードを使用しなければ、私はすべてのコードを彼に渡す必要があります.加算操作に判断を加えるだけで、if(name=’zjp’)は100元(少なめにして、さもないと捕まえられるべきだ、冗談だ).もし私が工場モードを使ったら、彼は1つのクラスを増やすだけでいいし、大量のコードを読む必要もなく、より多くの判断を増やす必要もありません.
2.単例モード
シングル・インスタンス・モードは、データベース接続など、1つのオブジェクトのみを生成し、重複しない本番オブジェクトです.多くの接続を生産すると、リソースがかかります.この場合、シングル・インスタンス・モードを使用する必要があります.やはりコードで話します.
<?php
class Single {
/* * * , static , static */
public static $single;
// ,
private function __construct() {
}
//
public static function getInstance() {
// , 。instanceof
if(self::$single instanceof self) {
return self::$single;
}
self::$single = new self();
return self::$single;
}
}
?>
3.登録ツリーモード
登録ツリーモードは、オブジェクトを生成するときに、このオブジェクトを私のツリーに挿入し、このオブジェクトが必要になったら直接ツリーから抜くといいです.ここで私たちのツリーは実は2次元配列で、key値は私たちがツリーに挿入したマークで、valueはオブジェクトです.コード:
class Register {
//
protected static $objects;
//
public static function set($alias, $object) {
self::$objects[$alias] = $object;
}
//
public static function get($alias) {
return self::$objects[$alias];
}
//
public static function _unset($alias) {
unset(self::$objects[$alias]);
}
}
では、この3つのパターンはどのように結合されているのでしょうか.
実は簡単です.私たちがしなければならないのは、工場クラスを使用して単一のモデルのオブジェクトを生産し、木に挿入することです.
//
class Factory {
public static function toNew() {
return Single::getInstance();
}
}
//
// $zjp
Register::set('zjp', Factory::toNew());
//
$zjp = Register::get('zjp');
print_r($zjp);
// , $zjp, Single