ホームページ バックエンド開発 PHPチュートリアル PHP_PHPチュートリアル「Simple Factory Pattern」のサンプルコード説明

PHP_PHPチュートリアル「Simple Factory Pattern」のサンプルコード説明

Jul 21, 2016 pm 03:16 PM
php コード による 意味 工場 抽象的な 方法 モデル 使用 単純 説明する

単純なファクトリ パターン:
①抽象基本クラス: サブクラスに実装するいくつかの抽象メソッドをクラス内に定義します
②抽象基本クラスから継承するサブクラス: 基本クラスに抽象メソッドを実装します
③ファクトリ クラス: インスタンスに使用されるオブジェクト

この記事に戻ってこの写真を見ると、効果がさらに良くなります



カプセル化メソッドを使用する

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

class Calc{
/**
* 計算結果
*
* @param int|float $num1
* @param int|float $num2
* @param string $operator
* @return int|float
*/
public functionulate($num1, $num2,$ 演算子){
try {
$result=0;
switch ($operator){
case '+':
$result= $num1+$num2;
case '-':
$result = $num1- $num2;
case '*':
$result= $num1*$num2;
if ($num2==0) {
新しい例外をスローします。 "除数を 0 にすることはできません");
$result= $num1/$num2;
return $result;
}catch (Exception $e){
echo "入力が間違っています:" e->getMessage();
}
}
}
$test=new Calc();
// echo $test->calculate(2,3,'+');//print: 5
echo $test-> ;calculate(5,0,'/');//Print: エラーを入力しました: 除数を 0 にすることはできません
?>


利点: 上記のコードはオブジェクト指向のカプセル化機能を使用しています。 includeクラスさえあれば他のページでも気軽に使えます
デメリット:柔軟な拡張やメンテナンスができない
例:「剰余」の演算を追加したい場合は、 switch ステートメント ブロックの場合、コードを次のように変更する必要があります
ブランチ ステートメントを追加します


コードをコピーします

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

class Calc{ public function Calculate($num1 ,$num2,$operator){ try { $result=0;
switch ($operator){
//...省略...
case '%':
$result= $num1%$num2;
break;
//...省略....
}
}catch (Exception $e){
echo "入力が間違っています:".$e->getMessage();
}
?>


コード分析: 上記の方法を使用して電卓に新しい関数演算を追加すると、次のような欠点があります
① 元のコード ブロックを変更する必要がある 変更するときに、誤って元のコードを変更する可能性があります。 「新しい関数を追加する」ためのオリジナルコード コードを修正しました
② 「べき乗」「平方根」「対数」「三角関数」「統計」など、追加する関数が多い場合、または、And、Or、Not、Xor などのプログラマー専用の計算関数を追加するため、switch ステートメントに N 個の分岐ステートメントを追加する必要があります。計算関数に 20 または 30 の case 分岐ステートメントがある場合、コードが 1 画面を超えることを想像してください。コードの可読性が大幅に低下するだけでなく、小さな関数を追加するには、関連しない他の関数も追加する必要があります。説明: これはプログラムの実行効率を大幅に低下させます
解決策: OOP 継承とポリモーフィズムのアイデアを採用します
単純なファクトリ パターンの初期実装


コードをコピーします

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


/* *
* 操作クラス * 抽象メソッドが含まれるため、クラスは抽象クラスとして宣言する必要があります */ abstract class Operation{ //抽象メソッドには関数本体を含めることはできません
abstract public function getValue($num1,$num2);//サブクラスがこの関数関数を実装することが強く要求されます
}
/**
*追加クラス
*/
class OperationAdd extends Operation {
public function getValue($num1,$num2){
return $num1+$num2
}
}
/**
*引き算のクラス
*/
class OperationSub extends Operation {
public function getValue($num1,$num2){
return $num1-$num2;
}
}
/**
* 掛け算のクラス
*/
class OperationMul 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();
}
}
}
?>


ここではオブジェクト指向の継承機能が採用されています。まず、仮想基底クラスを宣言し、サブクラスが実行するメソッドを指定します。基本クラス (getValue()) に実装する必要があります
分析: オブジェクト指向の継承機能を使用することで、「べき乗」、「平方根」、「対数」、「三角関数」などの元のプログラムを簡単に拡張できます。 、「統計」など、お待ちください。



コードをコピーします

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

/**
* 余り(余り)を求める
*
*/
class OperationRem extends Operation {
public function getValue($num1,$num2){
return $num1%$num12
}
}
?>
別のクラスを作成し (このクラスは仮想基本クラスを継承します)、クラス内の対応する関数 (累乗の計算など) を完了し、結合度を大幅に減らすだけで、将来のメンテナンスと拡張が容易になります。
未解決の問題がまだあります。それは、ユーザーが入力したオペレーターに従ってプログラムに対応するオブジェクトをインスタンス化させる方法です。
解決策: インスタンス化プロセスを実装するには別のクラスを使用します。このクラスは次のとおりです:


コードをコピーします コードは次のとおりです:
/ **
* エンジニアリングクラス、主にオブジェクトの作成に使用されます
* 機能: 入力された操作シンボルに従って、ファクトリは適切なオブジェクトをインスタンス化できます
*
* /
class Factory{
public static function createObj($operate){
switch ($operate){
case '+':
return new OperationAdd()
break;
新しいOperationSub();
break;
return new OperationSub()
break;
new OperationDiv()
}
$ test=Factory::createObj ('/');
$result=$test->getValue(23,0);


元の記事、転載元を明記してください: http://www.cnblogs.com/hongfei/




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

www.bkjia.com
tru​​e
http://www.bkjia.com/PHPjc/325885.html

技術記事

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles