単純なファクトリ パターン:
①抽象基本クラス: クラス内にいくつかの抽象メソッドを定義し、サブクラスに実装します
②抽象基本クラスを継承するサブクラス: 基本クラスに抽象メソッドを実装します
③ ファクトリ クラス: 使用オブジェクトをインスタンス化します
記事を読んだ後、この図をもう一度見ると、効果がさらに良くなります
カプセル化メソッドの使用
コードをコピー コードは次のとおりです。
php
class Calc{
/**
* 計算結果
*
* @param int|float $num1
* @param int|float $num2
* @param string $operator
* @return int|float
*/
public function Calculate($num1,$num2,$operator){
try {
$result=0; >switch ( $operator){
case ' ':
$result= $num1 $num2;
case '-':
$result= $num1-$num2;
ブレーク;
ケース '*':
$result= $num1*$num2;
ブレーク;
ケース '/':
if ($num2==0) {
throw new Exception("除数を 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,'/');//印刷: you 間違った入力: 除数を 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{ //抽象メソッドには関数を含めることはできませんbody
abstract public function getValue($num1,$num2);//サブクラスがこの関数関数を実装する必要があることが強く要求されます}
/**
* 追加クラス
*/
class OperationAdd extends Operation {
public function getValue($num1,$num2){
return $num1 $num2;
}
}
/**
* 減算クラス
*/
class OperationSub extendsオペレーション {
public function getValue($num1,$num2){
return $num1-$num2;
}
}
/**
* 乗算クラス
*/
class OperationMul extends Operation {
public function getValue($num1,$num2){
return $num1*$num2;
}
}
/**
* 部門クラス
*/
クラスOperationDiv extends Operation {
public function getValue($num1,$num2){
try {
if ($num2==0){
throw new Exception("除数を 0 にすることはできません") ;
}else {
return $num1/$num2;
}catch (例外 $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();
case '-':
return new OperationSub();
case ' *':
return new OperationSub();
case '/':
return new OperationDiv();
}
}
$test=Factory::createObj('/');
$result=$test->getValue(23,0);
echo $result; ?>
元の記事、転載元を明記してください: http://www.cnblogs.com/hongfei/

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール
