ホームページ  >  記事  >  バックエンド開発  >  PHPファクトリーメソッドパターンの問題

PHPファクトリーメソッドパターンの問題

coldplay.xixi
coldplay.xixiオリジナル
2020-08-03 11:17:112245ブラウズ

php ファクトリ メソッド パターン: 1. ファクトリ メソッドは、製品に独立したファクトリ クラスを提供し、異なるファクトリ インスタンスを通じて異なる製品インスタンスを作成します。2. 適切なカプセル化と明確なコード構造があり、優れたスケーラビリティとシールド製品カテゴリー。

PHPファクトリーメソッドパターンの問題

#php ファクトリ メソッド パターン:

1. ファクトリ メソッド パターンとは

Factoryメソッド プロダクトに対して独立したファクトリ クラスを提供し、異なるファクトリ インスタンスを通じて異なるプロダクト インスタンスを作成することです。

2. ファクトリ メソッド パターンの利点

これは、優れたカプセル化と明確なコード構造を備えています。 各オブジェクトの作成は条件付きで制限されています。たとえば、特定の製品オブジェクトを呼び出すには、オブジェクト自体を作成する複雑なプロセスを知らなくても、製品のクラス名と制約パラメータだけを知る必要があります。モジュール間の結合を減らします。

は優れたスケーラビリティを備えています。新しい製品カテゴリを追加するには、ファクトリ クラスを適切に追加するか、ファクトリ クラスを拡張するだけです。たとえば、次の例では、データベースの追加 Oracle 運用するにはOracleクラスを追加するだけで、ファクトリクラスは作業を変更することなくシステム拡張を完了できます。

商品カテゴリをブロックします。 この機能は非常に重要です。呼び出し元は、製品クラスの実装がどのように変更されるかを気にする必要はありません。製品のインターフェイスだけを気にする必要があります。インターフェイスが変更されない限り、上位モジュールは変わりません。システムは変更されるべきではありません。

3. 利用シナリオ

Alipay、WeChat、UnionPay の接続モード (connectMode) と支払い方法 (payMode)。ファクトリ モードを使用すると、「顧客」は特定の接続方法や支払い方法を知る必要がなく、connectMode と payMode を呼び出すだけで済みます。ファクトリモードは、

MySQLSQL ServerOracle## の接続モード (connectMode) やクエリモード (selectMode) などの操作に使用できます。 # などをカプセル化します。 具体的なケースを見てみましょう:

製品カテゴリ:

    //抽象产品类
    abstract class DataBase
    {
        abstract function connect();
        abstract function getOne();
    }
    
  //具体产品类
    class MySql extends DataBase
    {
        function connect()
        {
            return "MySQL连接对象返回";
        }
    
        function getOne()
        {
            return "MySQL返回查询结果";
        }
    }
    
  //具体产品类
    class SqlServer extends DataBase
    {
        function connect()
        {
            return "SQL Server连接对象返回";
        }
    
        function getOne()
        {
            return "SQL Server返回查询结果";
        }
    }

工場カテゴリ:

//抽象工厂类
    abstract class FactoryDataBase{
        function createDataBase(){}
    }
    
  //具体工厂类
    class FactoryMySql extends FactoryDataBase
    {
        public function createDataBase()
        {
            return new MySql();
        }
    }
    
  //具体工厂类
    class FactorySqlServer extends FactoryDataBase
    {
        public function createDataBase()
        {
            return new SqlServer();
        }
    }

Customer:

 $mysql = new FactoryMySql();
 $db1 = $mysql->createDataBase();
4. ファクトリ メソッド パターンの構成

    ファクトリの役割の抽象化: これはファクトリ メソッド パターンの中核です、そしてそれはアプリケーションに関連しています プログラムはそれとは何の関係もありません。これは、特定のファクトリ ロールが実装する必要があるインターフェイス、または継承する必要がある親クラスです。
  • 特定のファクトリ ロール: 特定のビジネス ロジックに関連するコードが含まれています。特定の製品に対応するオブジェクトを作成するためにアプリケーションによって呼び出されます。
  • 製品の抽象的な役割: 特定の製品または実装されたインターフェイスによって継承される親クラスです。
  • 特定の製品ロール: 特定のファクトリ ロールによって作成されたオブジェクトは、このロールのインスタンスです。
  • ファクトリ メソッド パターンはオブジェクトの作成を完全にパッケージ化しているようで、クライアント プログラムは抽象的な製品ロールによって提供されるインターフェイスのみを処理します。では、コード全体にファクトリーを配置する必要があるのでしょうか?する必要がない。次の状況では、ファクトリ メソッド パターンの使用を検討できます。

    #クライアント プログラムが、使用するオブジェクトの作成プロセスを知る必要がない場合。
  • クライアント プログラムで使用されるオブジェクトは変更される可能性があります。あるいは、どの特定のオブジェクトを使用すればよいかわからない場合もあります。
関連する学習に関する推奨事項:
PHP プログラミングの入門から熟練度まで

以上がPHPファクトリーメソッドパターンの問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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