PHP オブジェクト指向学習ノート 2: オブジェクト設計パターンの生成_PHP チュートリアル
php
1つ
含む
シングルトン
勉強
物体
アプリ
モデル
生成する
の
ノート
デザインパターン
のために
1. シングルトン パターン (シングルトン)
アプリケーションに一度に 1 つのオブジェクトのみが含まれる場合、このオブジェクトはグローバル変数を置き換えるために使用されます
コードをコピーします。は次のとおりです:
require_once("DB.php"); class DatabaseConnection{
public static function get()< ;/SPAN>< ;/STRONG>{
static $db = null;
$db = new DatabaseConnection();
private $_handle
; プライベート関数 __construct() {
$dsn = 'mysql://root:password@localhost/photos' ;
$this->_handle =& DB::Connect( $dsn, array() );
パブリック関数 handle()
{
return $this->_handle
}
print( "ハンドル = ".DatabaseConnection ::get()->handle()."n" );
print( "Handle = ".DatabaseConnection::get()->handle()."n" );
? >
2. ファクトリ メソッド パターンによって解決される問題:
1> オブジェクト タイプはコードの実行時にのみ認識されます。新しい製品タイプ; 各製品タイプ 特定の関数は、生成される製品クラスから作成者クラスを分離できます。デフォルトがない場合、作成者は製品オブジェクトを生成するためのクラス メソッドを定義します。実装が提供されると、それは作成されます。 クリエーター クラスのサブクラスは、インスタンス化を実行するために使用されます。一般に、ファクトリ パターンの利点は、オブジェクトの作成にあります。 そのタスクは、オブジェクト作成プロセスをカプセル化し、必要な新しいクラスを返すことです。オブジェクトの構造とオブジェクトの作成方法を変更したい場合は、オブジェクト ファクトリを選択するだけで済み、コードを 1 回変更するだけで済みます。 (ファクトリ パターンの機能は非常に強力で、アプリケーションの下部にあるため、今後も他の多くの複雑なパターンやアプリケーションで使用されます。) さまざまな処理オブジェクトは内部で自動的にオフロードされますが、ユーザーにとっては A のみです。インターフェイス メソッドを使用してファクトリ パターンを実践する簡単で便利な例:
コードをコピーします
コードは次のとおりです:
interface Hello{ function Say_hello()} class Englishimplements Hello{ public function Say_hello(){ echo "Hello!";
} }
class 中国語実装 Hello{
public functionsay_hello(){
echo "Hello";
public static function Factory ($type) {
if($type == 1) $temp = new English();
else if($type == 2) $temp = new Chinese();
else{
die("サポートされていません! ");
}
return $temp;
}
}
$test = Speak::factory(1);
$test->say_hello();
<詳細な設計パターン>では、このファクトリは、新しい製品がある場合、それに応じて変更し、対応するビジネス ロジックまたは判断を追加する必要があるため、このファクトリ モードはシンプル ファクトリ モードと呼ばれます。静的メソッドはファクトリ生産関数を実装します。(単純ではありません) ファクトリ メソッド パターン: ファクトリ メソッドは抽象クラスまたはインターフェイスであり、特定のファクトリはこのメソッド (インターフェイス) を実装し、ユーザーがそれを呼び出して特定の製品オブジェクトを作成できるようにします (各製品には対応する特定のファクトリ) は次のキーです。 こんにちは
コードをコピーします。 コードは次のとおりです。 1
class EnglishSpeaker は Speaker{
public function assignSpeaker(){
return new English();
}
}
//コンクリートファクトリー 2 class 中国語実装 Hello{
public functionsay_hello(){
echo "Hello";
public static function Factory ($type) {
if($type == 1) $temp = new English();
else if($type == 2) $temp = new Chinese();
else{
die("サポートされていません! ");
}
return $temp;
}
}
$test = Speak::factory(1);
$test->say_hello();
<詳細な設計パターン>では、このファクトリは、新しい製品がある場合、それに応じて変更し、対応するビジネス ロジックまたは判断を追加する必要があるため、このファクトリ モードはシンプル ファクトリ モードと呼ばれます。静的メソッドはファクトリ生産関数を実装します。(単純ではありません) ファクトリ メソッド パターン: ファクトリ メソッドは抽象クラスまたはインターフェイスであり、特定のファクトリはこのメソッド (インターフェイス) を実装し、ユーザーがそれを呼び出して特定の製品オブジェクトを作成できるようにします (各製品には対応する特定のファクトリ) は次のキーです。 こんにちは
コードをコピーします。 コードは次のとおりです。 1
class EnglishSpeaker は Speaker{
public function assignSpeaker(){
return new English();
}
}
class ChineseSpeaker は Speaker{
public function assignSpeaker(){
return new Chinese() ; } } //抽象プロダクト インターフェース Hello{
function Say_hello(); }
クラス 英語実装 Hello{
public function Say_hello(){
echo "Hello!";
}
//特定の製品 2
class Chinese 実装 Hello{
public functionsay_hello(){
echo "Hello";
}
}
使用法:
コードをコピー
コードは次のとおりです。
if(!empty($_GET['t' ])){
switch($_GET['t']){
ケース 1: $temp=new EnglishSpeaker();
break; temp=new ChineseSpeaker();
break;
$ man=$temp->assignSpeaker();
3. 抽象的な工場モデルの製品ファミリー。各エンティティ工場は製品ファミリー (1、2...) の製品を担当し、各製品ファミリーはいくつかの異なるカテゴリ (A、B...) に分類されます。あるエンティティ ファクトリを見ると、実際はファクトリ メソッド パターンです

上記の hello の例にさらに多くの式、通常の式と歌う式 (2 製品ファミリー) がある場合
//抽象ファクトリー
抽象クラス Speaker{
const NORMAL =1;
const SING =2;
抽象関数 assignSpeaker($flag_int)
}
//具体的なファクトリー 1
クラス EnglishSpeaker extends Speaker {
public function assignSpeaker($flag_int){
switch($flag_int){
case self::NORMAL:
return new NormalEnglish();
case self::SING:
break; }
}
//特定のファクトリー 2
class ChineseSpeaker extends Speaker{
public function assignSpeaker($flag_int){
switch($flag_int){
case self::NORMAL:
return new Normal Chinese() ; self::SING:
return new Sing Chinese();
break;
}
}
//抽象積
インターフェース Hello{
function Say_hello();
//具体的な積 A1
class NormalEnglish 実装
public functionsay_hello(){
echo "Hello!";
}
}
//特定の製品 B1
class Normal Chinese は Hello{
public function Say_hello(){
echo "Hello!";
}
}
/ /特定の製品 A2
class SingEnglish は Hello{
public functionsay_hello(){
echo "ああ、ジングルベル、ジングルベル、ハロー! ハロー! ハロー!"
}
}
//特定の製品 B2
クラス Sing Chinese は実装します。 Hello{
public functionsay_hello(){
echo "Ding Ding Dong, Ding Ding Dong, Hello! Hello! Hello!";
}
}
使用:
コードをコピー
コードは次のとおりです:
//プログラムのビジネスロジックに従って特定のファクトリーを決定します
true
http://www.bkjia.com/PHPjc/326063.html技術記事
クラス 英語実装 Hello{
public function Say_hello(){
echo "Hello!";
}
//特定の製品 2
class Chinese 実装 Hello{
public functionsay_hello(){
echo "Hello";
}
}
使用法:
コードをコピー
コードは次のとおりです。
if(!empty($_GET['t' ])){
switch($_GET['t']){
ケース 1: $temp=new EnglishSpeaker();
break; temp=new ChineseSpeaker();
break;
$ man=$temp->assignSpeaker();
3. 抽象的な工場モデルの製品ファミリー。各エンティティ工場は製品ファミリー (1、2...) の製品を担当し、各製品ファミリーはいくつかの異なるカテゴリ (A、B...) に分類されます。あるエンティティ ファクトリを見ると、実際はファクトリ メソッド パターンです

上記の hello の例にさらに多くの式、通常の式と歌う式 (2 製品ファミリー) がある場合
コードをコピーします コードは次のとおりです。
//抽象ファクトリー
抽象クラス Speaker{
const NORMAL =1;
const SING =2;
抽象関数 assignSpeaker($flag_int)
}
//具体的なファクトリー 1
クラス EnglishSpeaker extends Speaker {
public function assignSpeaker($flag_int){
switch($flag_int){
case self::NORMAL:
return new NormalEnglish();
case self::SING:
break; }
}
//特定のファクトリー 2
class ChineseSpeaker extends Speaker{
public function assignSpeaker($flag_int){
switch($flag_int){
case self::NORMAL:
return new Normal Chinese() ; self::SING:
return new Sing Chinese();
break;
}
}
//抽象積
インターフェース Hello{
function Say_hello();
//具体的な積 A1
class NormalEnglish 実装
public functionsay_hello(){
echo "Hello!";
}
}
//特定の製品 B1
class Normal Chinese は Hello{
public function Say_hello(){
echo "Hello!";
}
}
/ /特定の製品 A2
class SingEnglish は Hello{
public functionsay_hello(){
echo "ああ、ジングルベル、ジングルベル、ハロー! ハロー! ハロー!"
}
}
//特定の製品 B2
クラス Sing Chinese は実装します。 Hello{
public functionsay_hello(){
echo "Ding Ding Dong, Ding Ding Dong, Hello! Hello! Hello!";
}
}
使用:
コードをコピー
コードは次のとおりです:
//プログラムのビジネスロジックに従って特定のファクトリーを決定します
switch($_GET[' language']){ case 1: $temp=new EnglishSpeaker() break; temp= new ChineseSpeaker(); break; }
//プログラムのビジネスロジックに従って特定の製品を決定し、特定のファクトリーを気にする必要がなく、保守性が向上します$man=$temp ->assignSpeaker( $_GET['style' ]);
//製品を使用するとき、それがどの製品であるかを気にする必要はありません
4プロトタイプ (プロトタイプ)
クローンを使用して既存の特定の製品をコピーし、それを指定します。製品カテゴリ自体が独自の生成の基礎になります。
http://www.bkjia.com/PHPjc/326063.html
www.bkjia.com//製品を使用するとき、それがどの製品であるかを気にする必要はありません
4プロトタイプ (プロトタイプ)
クローンを使用して既存の特定の製品をコピーし、それを指定します。製品カテゴリ自体が独自の生成の基礎になります。
http://www.bkjia.com/PHPjc/326063.html
true
http://www.bkjia.com/PHPjc/326063.html技術記事
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7333
9


Java チュートリアル
1627
14


CakePHP チュートリアル
1351
46


Laravel チュートリアル
1262
25


PHP チュートリアル
1209
29



PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
