1. シングルトン パターン (シングルトン)
アプリケーションに一度に 1 つのオブジェクトのみが含まれる場合、このオブジェクトはグローバル変数を置き換えるために使用されます。 >
コードをコピー コードは次のとおりです。
require_once("DB.php"); DatabaseConnection{} クラス 英語は 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,ディン ディン ドン、こんにちは! こんにちは!";
}
}
コードをコピーしてください
コードは次のとおりです:
//プログラムのビジネス ロジックに従って特定のファクトリーを決定します
case 2: $temp=new ChineseSpeaker() } // ビジネス ロジックに従って特定の製品を決定しますプログラムの特定のファクトリーを気にする必要がなく、保守性が向上します$man=$temp->assignSpeaker( $_GET['style']); //製品を使用するとき、どの特定の製品であるかを気にする必要はありません
$man->say_hello();
4. プロトタイプ (プロトタイプ)
既存の特定の製品をコピーすると、特定の製品クラス自体が独自の生成の基礎になります。