PHP オブジェクト指向学習ノート 2: オブジェクト設計パターンの生成

WBOY
リリース: 2016-06-13 11:57:41
オリジナル
922 人が閲覧しました

1. シングルトン パターン (シングルトン)
アプリケーションに一度に 1 つのオブジェクトのみが含まれる場合、このオブジェクトはグローバル変数を置き換えるために使用されます。 >

コードをコピー コードは次のとおりです。

require_once("DB.php"); DatabaseConnection{
パブリック静的関数 get(){
static $db = null; >if ( $db == null )
$db = new DatabaseConnection();
return $db;
}
プライベート関数 __construct() {
$dsn = 'mysql://root:password@localhost/photos'; this- >_handle =& DB::Connect( $dsn, array() );
}
public function handle()
{
return $this->_handle; }
}
print( "Handle = ".DatabaseConnection::get()->handle()."n" );
print( "Handle = ".DatabaseConnection::get()- > handle()."n" );




2. ファクトリ メソッド パターンによって解決される問題:

1> 生成されるオブジェクト タイプは、コードの実行時にのみわかります。2> オブジェクト タイプは、特定の関数でカスタマイズする必要がある場合があります。パターンは、作成者クラスと必須のクラスを結合します。作成された製品クラスは分離されます。作成者は、製品オブジェクトの生成に使用されるクラス メソッドを定義するファクトリ クラスです。デフォルトの実装が提供されていない場合、インスタンス化は作成者のサブクラスによって実行されます。一般に、作成者クラスの各 A サブクラスは、対応する製品サブクラスをインスタンス化します。ファクトリ パターンの利点は、オブジェクトを作成することにあります。 そのタスクは、オブジェクト作成プロセスをカプセル化し、必要な新しいクラスを返すことです。オブジェクトの構造とオブジェクトの作成方法を変更したい場合は、オブジェクト ファクトリを選択するだけで済み、コードを 1 回変更するだけで済みます。 (ファクトリ パターンの機能は非常に強力で、アプリケーションの下部にあるため、今後も他の多くの複雑なパターンやアプリケーションで使用されます。) さまざまな処理オブジェクトは内部で自動的にオフロードされますが、ユーザーにとっては A のみです。インターフェイス メソッドを使用してファクトリ パターンを練習する簡単で便利な例:


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

インターフェイス Hello{
function Say_hello();

} クラス 英語は Hello{ public function Say_hello(){ echo "Hello!" }

}

クラス中国語はHelloを実装します{
パブリック関数say_hello(){
エコー "Hello";
}
}
クラススピーク{
パブリック静的関数ファクトリー($type) {
if($type == 1) $temp = new English();
else if($type == 2) $temp = new Chinese();
else{
die( "サポートされていません! ");
return $temp;
}
$test = Speak::factory(1); );











設計パターンの詳細> では、このファクトリーは生産されるすべての製品を識別できる必要があるため、上記は単純なファクトリー パターンと呼ばれます。新しい製品の場合、それに応じてファクトリを変更する必要があり、対応するビジネス ロジックまたは判断を追加する必要があります。 単純なファクトリ パターンの兆候は、静的メソッドがファクトリの生産機能を実装していることです (単純ではありません) ファクトリ メソッド パターン: ファクトリ メソッドは抽象クラスです。またはインターフェイスであり、特定のファクトリがこのメソッド (インターフェイス) を実装するため、ユーザーは特定の製品オブジェクトを作成するために呼び出します (各製品には対応する特定のファクトリがあります)。 以下は書き換えられた hello


です。
コードをコピー

コードは次のとおりです。 //抽象ファクトリー

インターフェイス Speaker{

function assignSpeaker()
} //具体的なファクトリ 1
class EnglishSpeakerimplements Speaker{
public function assignSpeaker(){
return new English();
}
}
//特定のファクトリ 2
class ChineseSpeaker 実装 Speaker{
public function assignSpeaker(){
return new Chinese();
}
}
//抽象プロダクト
インターフェース Hello{
function Say_hello ();
}
//具体的な製品 1
クラス 英語は Hello{
public function Say_hello(){
echo "Hello!"
}
}
//特定の製品 2
class Chinese 実装 Hello{
public function Say_hello(){
echo "Hello"
}
}


使用:


コードをコピー

コードは次のとおりです: if(!empty($_GET['t'])) { switch($_GET['t']){

ケース 1: $temp=new EnglishSpeaker();

break;
ケース 2: $temp=new ChineseSpeaker(); >ブレイク;
}
$man=$temp->assignSpeaker() ;
$man->say_hello();


3. 抽象的な工場モデルの製品ファミリー。各エンティティ工場は製品ファミリー (1、2...) の製品を担当し、各製品ファミリーはいくつかの異なるカテゴリ (A、B ...) に分類されます。あるエンティティ ファクトリを見ると、それは実際にはファクトリ メソッド パターンです

上記の hello の例にさらに多くの式、通常の式と歌う式がある場合 (2 製品ファミリー)

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


//抽象ファクトリー
抽象クラス Speaker{
const
const SING =2;
abstract function assignSpeaker($flag_int);
}
//特定のファクトリー 1
class EnglishSpeaker extends Speaker {
public function assignSpeaker($flag_int){
switch($flag_int) {
case self::NORMAL:
return new NormalEnglish();
case self::SING:
return new SingEnglish(); }
}
}
//特定のファクトリー 2
class ChineseSpeaker extends Speaker{
public function assignSpeaker($flag_int){
switch($flag_int) {
case self ::NORMAL:
return new Normal Chinese();
case self::SING:
return new
break; 🎜>}
//抽象プロダクト
インターフェース Hello{
function Say_hello();
}
//具体的なプロダクト A1
クラス NormalEnglish 実装 Hello{
パブリック関数 Say_hello (){
echo "Hello!";
}
}
//特定の製品 B1
クラス Normal Chinese は Hello{
public functionsay_hello() {
echo " Hello!";
}
}
//特定の製品 A2
class SingEnglishimplements Hello{
public functionsay_hello(){
echo "ああ、ジングルベル、ジングルベル、こんにちは! こんにちは!";
}
}
//特定の製品 B2
クラス Sing Chinese は Hello{
public function Say_hello(){
echo "Ding Ding Dong,ディン ディン ドン、こんにちは! こんにちは!";
}
}


コードをコピーしてください

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


//プログラムのビジネス ロジックに従って特定のファクトリーを決定します

switch($_GET[' language']){
case 1 : $temp=new EnglishSpeaker();
break;

case 2: $temp=new ChineseSpeaker() } // ビジネス ロジックに従って特定の製品を決定しますプログラムの特定のファクトリーを気にする必要がなく、保守性が向上します$man=$temp->assignSpeaker( $_GET['style']); //製品を使用するとき、どの特定の製品であるかを気にする必要はありません

$man->say_hello();




4. プロトタイプ (プロトタイプ)

既存の特定の製品をコピーすると、特定の製品クラス自体が独自の生成の基礎になります。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート