PHP デザイン パターン - コンビネータ パターン
免責事項: この一連のブログの参考資料は、Cheng Jie 著の「Dahua Design Pattern」です。
結合モード (部分-全体モードとも呼ばれます) は、オブジェクトをツリー構造に結合して、「部分-全体」階層を表します。合成パターンにより、ユーザーは単一オブジェクトと複合オブジェクトを一貫して使用できます。これにより、ツリー構造の問題における単純な要素と複雑な要素の概念が曖昧になります。クライアント プログラムは、複雑な要素を単純な要素と同じように処理できるため、クライアント プログラムが複雑な要素の内部構造から切り離されます。
実装クラス図:
3 つの主要な役割:
抽象構造 (Company) 役割: この役割は、すべてのクラスに共通のインターフェイスのデフォルト動作を実装し、インターフェイス管理サブコンポーネントを宣言します。
リーフノード(テクノロジー)役割:リーフオブジェクトを表し、子ノードを持ちません。サブカンパニー文字: ADD()など、サブコンポーネントに関連する操作を実現するためにサブコンポーネントを格納するために使用されます。
代 実装コード:
<?php/** * Created by PhpStorm. * User: Jiang * Date: 2015/5/2 * Time: 21:14 *//**抽象结构角色 公司 * Class Company */abstract class Company{ protected $name; function __construct($name) { $this->name=$name; } /**增加 * @param Company $company 子公司,部门 * @return mixed */ abstract function Add(Company $company); /**移除 * @param Company $company 子公司,部门 * @return mixed */ abstract function Remove(Company $company); /**显示公司及部门结构 * @param $depth * @return mixed */ abstract function Display($depth);}/**枝节点 子公司 * Class Beijing */class SubCompany extends Company{ private $sub_companys=array(); function __construct($name) { parent::__construct($name); } function Add(Company $company) { $this->sub_companys[]=$company; } function Remove(Company $company) { $key=array_search($company,$this->sub_companys); if($key!==false) { unset($this->sub_companys[$key]); } } function Display($depth) { $pre=""; for($i=0;$i<$depth;$i++) { $pre.="-"; } $pre.=$this->name."<br/>"; echo $pre; foreach($this->sub_companys as $v) { $v->Display($depth+2); } }}/**叶子节点 财务部 * Class DeptCompany */class MoneyDept extends Company{ function __construct($name) { parent::__construct($name); } /**增加 * @param Company $company 子公司,部门 * @return mixed */ function Add(Company $company) { echo "叶子节点,不能继续添加节点。。。。。。。。。。<br/>"; } /**移除 * @param Company $company 子公司,部门 * @return mixed */ function Remove(Company $company) { echo "叶子节点,不能删除节点。。。。。。。。。。<br/>"; } /**显示公司及部门结构 * @param $depth * @return mixed */ function Display($depth) { $pre=""; for($i=0;$i<$depth;$i++) { $pre.="-"; } $pre.=$this->name."<br/>"; echo $pre; }}/**叶子节点 技术部门 * Class DeptCompany */class TechnologyDept extends Company{ function __construct($name) { parent::__construct($name); } /**增加 * @param Company $company 子公司,部门 * @return mixed */ function Add(Company $company) { echo "叶子节点,不能继续添加节点。。。。。。。。。。<br/>"; } /**移除 * @param Company $company 子公司,部门 * @return mixed */ function Remove(Company $company) { echo "叶子节点,不能删除节点。。。。。。。。。。<br/>"; } /**显示公司及部门结构 * @param $depth * @return mixed */ function Display($depth) { $pre=""; for($i=0;$i<$depth;$i++) { $pre.="-"; } $pre.=$this->name."<br/>"; echo $pre; }}
テストコード:
利点:
組み合わせモード再帰的またはグレーディング データ構造の処理を最適化できます。構成パターンを非常に便利にする階層データ構造の例は数多くあります。階層データ構造の一般的な例は、コンピューターを使用するたびに遭遇するもの、つまりファイル システムです。ファイル システムはディレクトリとファイルで構成されます。各ディレクトリにはコンテンツを含めることができます。ディレクトリの内容はファイルまたはディレクトリになります。このようにして、コンピュータのファイル システムは再帰的な構造で編成されます。このようなデータ構造を記述したい場合は、複合パターンを使用できます。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。
