PHPデザインパターンまとめ_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:12:41
オリジナル
718 人が閲覧しました

1. シングルトンモード

いわゆるシングルトン モードとは、常にアプリケーション内にこのクラスのインスタンスが 1 つだけ存在することを意味します。一般に、シングルトン モードを使用して 1 つのオブジェクトのみがデータベースにアクセスできるようにし、複数のデータベース接続が開かれるのを防ぎます。シングルトン クラスを実装するには、次の点を含める必要があります:

通常のクラスとは異なり、シングルトン クラスは直接インスタンス化できませんが、それ自体でのみインスタンス化できます。したがって、このような制限効果を得るには、コンストラクターをプライベートとしてマークする必要があります。
シングルトン クラスが直接インスタンス化されずに機能するには、そのようなインスタンスが提供される必要があります。したがって、シングルトン クラスには、クラスのインスタンスを保存できるプライベート静的メンバー変数と、インスタンスにアクセスできる対応するパブリック静的メソッドが必要です。
PHP では、シングルトン クラス オブジェクトのクローン作成によって上記のシングルトン クラスの実装形式が崩れることを防ぐために、通常、ベースには空のプライベート __clone() メソッドが提供されます。
以下は基本的なシングルトン パターンです:

コードをコピーします コードは次のとおりです:

class SingetonBasic {
private static $instance;

// 他の変数..

F プライベート関数 __construct () {

// 構築されます..
}

プライベート関数 __clone() {}

S Pualic 静的関数 Getinstance () {

if (! (Self :: $ Instance Instanceof Self)) {

Self :: $ Instance = new self () }
;
// 他の関数..
}

$a = SingetonBasic::getInstance();

$b = SingetonBasic::getInstance();

var_dump($a === $b);



2. ファクトリ パターン

ファクトリ パターンを使用すると、さまざまな入力パラメータまたはアプリケーション構成に基づいて他のクラスのインスタンスを実装して返すために特別に使用されるクラスを作成できます。以下は最も基本的なファクトリーパターンです:


コードをコピーします

コードは次のとおりです:

class FactoryBasic { Public static function create($config) {
}
}

たとえば、ここではシェイプ オブジェクトを記述するファクトリがあり、渡されたパラメータの数に基づいてさまざまなシェイプを作成することを望んでいます。

コードをコピーします

コードは次のとおりです:


// 形状を決定するパブリック機能: 取得周長と面积。
interface IShape {
function getCircum();
function getArea();
}

// 定义四角形类
class Rectangle は IShape を実装します {
private $width, $height;

public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}

public function getCircum() {
return 2 * ($this->width + $this->height);
}

public function getArea() {
return $this->width * $this->height;
}
}

// 定义圆类
class Circle は IShape {
private $radii;

を実装します。

パブリック関数 __construct($radii) {
$this->radii = $radii;
}

public function getCircum() {
return 2 * M_PI * $this->radii;
}

public function getArea() {
return M_PI * pow($this->radii, 2);
}
}

// 入力されたパラメータの数に基づいて、異なる形状が作成されます。
class FactoryShape {
public static function create() {
switch (func_num_args()) {
case 1:
return new Circle( func_get_arg(0) );
ブレーク;
ケース 2:
return new Rectangle(func_get_arg(0), func_get_arg(1));
ブレーク;

}
}
}

// 四角形对象
$c = FactoryShape::create(4, 2);
var_dump($c->getArea());
// 四角形对象
$o = FactoryShape::create(2);
var_dump($o->getArea());


プロセス モードを使用すると、メソッドを使用するときにより簡単になります。これは、1 つの種類と 1 つの方法だけがあり、プロセス モードを使用していないため、使用時に決定する必要があるためです。プロセス モードを使用すると、将来のアプリケーション プログラムの変更がより簡単になり、形状を追加する場合に比べて、プロセス モードを使用せずに、プロセス クラス内の create() メソッドを変更するだけで済みます。形状を変更するコードブロックを変更する必要があります。 3、観察者モード

観察者モードは、コンポーネント間の密接な結合を回避する別の方法を提供するものです。観察者その結果、可視オブジェクトが変更されると、その情報を使用して実行される操作は、可視オブジェクトとは関係なくメッセージが送信されます。理由を知る必要はなく、相互に意見を言い合います。
一个一个简单:
当当当在在电台收听时(即电台加入加入加入个新新新听众、它它它它一条提示通过通过如下:


// 観察者インターフェース
interface IObserver {
function onListen($sender, $args);
function getName();
}

// 被観察インターフェース
interface IObservable {
function addObserver($observer);
function RemoveObserver($observer_name);
}

// 観察者类
抽象クラス Observer は IObserver を実装します {
protected $name;

public function getName() {
return $this->name;
}
}

// 可被観察类
class Observable は IObservable を実装します {
protected $observers = array();

public Public Function addobserver($ observer){

if(!(!($ observer of iobserver)){
utrent; public Public Function removeObserver($ observer_name){
foreach($ this-> observers as $ index => $ observer){
if($ observer-> getname()=== $ $ $ observer_name){$ array_splice($ this->observers, $index, 1);
return;
}

}

}
}

// 模倣可能なクラス:RadioStation
class RadioStation extends Observable {

public function addListener($listener) {
foreach ($this->observers as $observer) {
$observer->onListen($this, $listener);

}

}
}

// 模拟一个観察者类
class RadioStationLogger extends Observer {
protected $name = 'logger';

public function onListen($sender, $args) {
echo $args, ' ラジオ局に参加します。
';

}

}

// 模拟另外一观観察者类

class OtherObserver extends Observer {

protected $name = 'other';
public function onListen($sender, $args) {
echo '他の観察者..
' ;
}

}


$rs = 新しい RadioStation();

// 観察者を注入します
$rs->addObserver(new RadioStationLogger());
$rs->addObserver(new OtherObserver());

// 移除観察者

$rs->removeObserver('other');

// 観測可能な情報
$rs->addListener('cctv');



http://www.bkjia.com/PHPjc/326618.html

www.bkjia.comtru​​e

http://www.bkjia.com/PHPjc/326618.html技術記事 1、 例モード 例モード、つまり、いつでも、アプリケーションプログラムにはこの種の例が 1 つだけ存在します。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!