ホームページ バックエンド開発 C#.Net チュートリアル .NET シンプル ファクトリ パターンの説明

.NET シンプル ファクトリ パターンの説明

Dec 20, 2016 pm 01:19 PM
シンプルな工場パターン

シンプル ファクトリ パターンの紹介:

シンプル ファクトリ パターンは、静的ファクトリ メソッド パターンとも呼ばれる作成パターンですが、23 の GOF デザイン パターンの 1 つではありません。単純なファクトリ パターンでは、ファクトリ オブジェクトを使用して、どの製品クラス インスタンスを作成するかを決定します。シンプル ファクトリ パターンは、ファクトリ パターン ファミリの中で最も単純かつ最も実用的なパターンであり、さまざまなファクトリ パターンの特別な実装として理解できます。

構造パターン図:

.NET シンプル ファクトリ パターンの説明

役割分類:

ファクトリ (作成者) ロール
単純なファクトリ パターンの中核であり、すべてのインスタンスを作成する内部ロジックの実装を担当します。ファクトリ クラスでプロダクト クラスを作成するメソッドは、外部から直接呼び出して、必要なプロダクト オブジェクトを作成できます。

抽象的な製品の役割
単純なファクトリ パターンによって作成されたすべてのオブジェクトの親クラスは、すべてのインスタンスに共通のパブリック インターフェイスを記述する役割を果たします。

Concrete Product ロール
は、単純なファクトリ パターンの作成ターゲットです。作成されるすべてのオブジェクトは、このロールを実行する特定のクラスのインスタンスです。

実際の状況を紹介します:

テナント管理システムがある場合、その中のテナントタイプは可変であり、テナントタイプごとに家賃の計算式が異なります

タイプAのテナントの家賃金額 = 日数*単価+実績*0.005

B型世帯賃料=月*(月額+実績*0.001)

分析:

1 これが実店舗の行動です。ですが、動作が異なるので、ストア クラスを抽象化します。コードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.IFactroy
{
   
  public interface Ishop
  {
    double Getrent(int days, double dayprice, double performance);
  }
}
ログイン後にコピー

2. ストアを抽象化した後、特定の製品クラスを作成する必要があります。特定のタイプのストア。ストアの動作メソッドを実装します。タイプ A のストアを作成します

using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.product
{
  //A类型的商店的创建
  public class Ashop:Ishop
  {
    /// <summary>
    /// /// A类型商店租金额,天数*单价+绩效*0.005
    /// </summary>
    /// <param name="days">天数</param>
    /// <param name="dayprice">每天单价</param>
    /// <param name="performance">日平均绩效</param>
    /// <returns></returns>
    public double Getrent(int days, double dayprice, double performance)
    {
      Console.WriteLine("A商店的租金算法");
      return days * dayprice + performance * 0.01;
    }
  }
}
ログイン後にコピー

3. タイプ B のストアを作成します:

using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.product
{
  /// <summary>
  /// B类型的商店的创建
  /// </summary>
  public class Bshop:Ishop
  {
     
    /// <summary>
    /// B类型商店的租金=月份*(每月价格+performance*0.001)
    /// </summary>
    /// <param name="month">月数</param>
    /// <param name="monthprice">月单价</param>
    /// <param name="performance">月平均绩效</param>
    /// <returns></returns>
    public double Getrent(int month, double monthprice, double performance)
    {
      Console.WriteLine("B商店的租金算法");
      return month * (monthprice + performance * 0.001);
    }
  }
}
ログイン後にコピー

4. タイプ ストアを作成してメソッドを実装した後、その種のオブジェクトを作成する方法を検討します。どのような状況で、単純なファクトリ パターンのコア部分であるファクトリ クラスが登場しました

using SimpleFactory.App.IFactroy;
using SimpleFactory.App.product;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.factoryMethod
{
  public class factorymethod
  {
    public Ishop CreateShow(string show)
    {
      switch (show.Trim().ToLower())
      {
        case"ashop":
          return new Ashop();
        case "bshop":
          return new Ashop();
        default:
          throw new Exception("该商店不存在");
      }
    }
  }
}
ログイン後にコピー

5. 次に、現在のストア タイプに基づいて、このタイプのストアにどのアルゴリズムを使用するかを判断します:

using SimpleFactory.App.factoryMethod;
using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App
{
  class Program
  {
    static void Main(string[] args)
    {
      Ishop As;
      factorymethod afm = new factorymethod();
      As = afm.CreateShow("ashop"); //a 类型的某商店
      double total = As.Getrent(30, 300, 2000);   //30 天/100元 日平均绩效为2000
      Console.WriteLine("该A类型商店的租金为:" + total);
 
      Console.WriteLine("=============");
 
      Ishop Bs;
      factorymethod bfm = new factorymethod();
      Bs = bfm.CreateShow("bshop"); //b 类型的某商店
      total = Bs.Getrent(3, 3000, 60000);     //3 月/4000元 月平均绩效为60000
      Console.WriteLine("该B类型商店的租金为:" + total);
      Console.ReadKey();
    }
  }
}
ログイン後にコピー

ここでは、顧客が必要とする 2 つのタイプのストアのアルゴリズム要件を実装しましたが、優れた設計アーキテクチャとして、顧客が C タイプのストアと D タイプのストアを追加した場合のその後の需要の変化も考慮する必要があります。 -type ストア、それらのアルゴリズム要件は異なります。この時点で、C および D タイプ ストアを作成し、Ishop インターフェイスを継承し、内部のメソッドを実装する必要があります。同時に、ファクトリ クラスの変更と追加を続ける必要があります。対応するストアをキャプチャして作成するように切り替える場合、そのような状況が発生すると、プログラムのスケーラビリティとその後のプロジェクトのメンテナンスに役立ちません。

利点:

単純なファクトリ パターンは、外部から与えられた情報に基づいてオブジェクトの特定のクラスを作成するかを決定できます。これにより、外部の世界は特定の製品オブジェクトを直接作成するという恥ずかしい状況を取り除くことができます。

外の世界は特定のクラスから隔離されており、偶然性が低い。

それぞれの責任と権限を明確に区別することで、ソフトウェア アーキテクチャ全体の最適化に役立ちます。

短所:

ファクトリクラスはすべてのインスタンスの作成ロジックを集中させているため、GRASPRの高い凝集性の責任割り当て原則に簡単に違反します

単純なファクトリパターンは特定の変更に適応できますが、解決できる問題は限定的ではありません。 。作成できるクラスは事前に考慮する必要があります。新しいクラスを追加する必要がある場合は、ファクトリ クラスを変更する必要があります。

生じた控訴状況をどのように解決するかは考える価値があり、次のファクトリーメソッドパターンでうまく解決されます。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

コードの再利用性を向上させるために PHP で単純なファクトリ パターンを適用する方法 コードの再利用性を向上させるために PHP で単純なファクトリ パターンを適用する方法 Sep 05, 2023 pm 12:27 PM

コードの再利用性を向上させるために PHP でシンプル ファクトリ パターンを適用する方法 シンプル ファクトリ パターン (SimpleFactoryPattern) は、オブジェクトを作成するときに統一されたインターフェイスを提供し、さまざまな条件に応じて異なるオブジェクトを作成できるようにする、一般的に使用されるデザイン パターンです。このモードでは、コードの結合を効果的に削減し、コードの保守性と再利用性を向上させることができます。 PHP では、単純なファクトリ パターンを使用して、コードの構造とロジックを最適化できます。シンプル ファクトリ パターンを理解する シンプル ファクトリ パターンは 3 つで構成されます

PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのバージョン管理と管理を実装する方法 PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのバージョン管理と管理を実装する方法 Sep 06, 2023 pm 02:39 PM

PHP オブジェクト指向のシンプル ファクトリ モデルを通じてオブジェクトのバージョン管理と管理を実装する方法 大規模で複雑な PHP プロジェクトを開発する場合、バージョン管理と管理は非常に重要です。適切な設計パターンを通じて、オブジェクトの作成と使用をより適切に管理および制御できるため、コードの保守性と拡張性が向上します。この記事では、PHP オブジェクト指向のシンプルなファクトリ パターンを使用してオブジェクトのバージョン管理と管理を実装する方法を紹介します。シンプル ファクトリ パターンは、ファクトリ クラスを通じて指定されたオブジェクトをインスタンス化するクラスを作成するための設計パターンです。

PHP で簡単なファクトリ パターンを適用してオブジェクトの自動作成を実現する方法 PHP で簡単なファクトリ パターンを適用してオブジェクトの自動作成を実現する方法 Sep 05, 2023 pm 02:27 PM

PHP でシンプル ファクトリ パターンを適用してオブジェクトの作成を自動化する方法 シンプル ファクトリ パターンは、オブジェクトの作成に使用される一般的なデザイン パターンであり、オブジェクトのインスタンス化のプロセスを抽象化します。 PHP では、単純なファクトリ パターンを適用すると、オブジェクトの作成と特定の実装を切り離すことができ、コードがより柔軟で保守しやすくなります。この記事では、例を使用して、PHP でシンプル ファクトリ パターンを適用する方法を説明します。携帯電話やテレビを販売する電気店があるとします。ユーザーの選択に基づいて写真を作成する必要があります

PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのポリモーフィズムを実現する方法 PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのポリモーフィズムを実現する方法 Sep 05, 2023 am 08:43 AM

PHP のオブジェクト指向のシンプル ファクトリ パターンを通じてオブジェクトのポリモーフィズムを実現する方法 シンプル ファクトリ パターンは、共通のファクトリ クラスを通じてさまざまなタイプのオブジェクトを作成し、オブジェクト作成プロセスを隠すことができる一般的な設計パターンです。 PHP オブジェクト指向のシンプルなファクトリ パターンは、オブジェクトのポリモーフィズムを実現するのに役立ちます。単純なファクトリ パターンには、ファクトリ クラス、抽象クラス、具象クラスという 3 つの基本的な役割が含まれています。まず、抽象メソッドsay()を含む抽象クラスAnimalを定義します。

Java ファクトリ パターンの実装と適用に関する詳細なディスカッション Java ファクトリ パターンの実装と適用に関する詳細なディスカッション Feb 24, 2024 pm 10:15 PM

Java ファクトリ パターンの原理とアプリケーションの詳細な説明 ファクトリ パターンは、オブジェクトを作成し、オブジェクト作成プロセスをカプセル化するために使用される、一般的に使用される設計パターンです。 Java でファクトリ パターンを実装する方法は数多くありますが、最も一般的なのは、単純なファクトリ パターン、ファクトリ メソッド パターン、および抽象ファクトリ パターンです。この記事では、これら 3 つのファクトリ パターンの原理と応用を詳しく紹介し、対応するコード例を示します。 1. シンプル ファクトリ パターン シンプル ファクトリ パターンは、最も単純で最もよく使用されるファクトリ パターンです。ファクトリ クラスを使用して、渡されたパラメータに基づいてさまざまな値を返します。

PHP オブジェクト指向のシンプルなファクトリ パターンを使用してテスト可能なオブジェクト インスタンスを作成する方法 PHP オブジェクト指向のシンプルなファクトリ パターンを使用してテスト可能なオブジェクト インスタンスを作成する方法 Sep 05, 2023 pm 02:45 PM

PHP オブジェクト指向のシンプル ファクトリ パターンを使用してテスト可能なオブジェクト インスタンスを作成する方法 シンプル ファクトリ パターンは、さまざまな条件に基づいてさまざまなオブジェクト インスタンスを作成するのに役立つ一般的に使用されるソフトウェア設計パターンです。 PHP オブジェクト指向プログラミングでは、単純なファクトリ パターンを組み合わせることで、コードのテスト容易性と保守容易性を向上させることができます。この記事では、PHP のオブジェクト指向のシンプルなファクトリ パターンを使用して、テスト可能なオブジェクト インスタンスを作成する方法を学びます。このプロセスを簡単な例で説明します。まず、を表すインターフェイスを定義しましょう。

PHP オブジェクト指向の単純なファクトリ パターンを通じてオブジェクトのカプセル化と隠蔽を実装する方法 PHP オブジェクト指向の単純なファクトリ パターンを通じてオブジェクトのカプセル化と隠蔽を実装する方法 Sep 05, 2023 pm 05:36 PM

PHP オブジェクト指向の単純なファクトリ パターンを通じてオブジェクトのカプセル化と隠蔽を実現する方法 はじめに: PHP オブジェクト指向プログラミングでは、カプセル化はデータ隠蔽を実現するための重要な概念です。カプセル化では、データと関連する操作をクラス内にカプセル化し、外部に公開されるパブリック インターフェイスを通じてデータを操作できます。シンプル ファクトリ パターンは、オブジェクトの作成によく使用されるデザイン パターンで、オブジェクトの作成と使用を分離することで、システムをより柔軟で拡張しやすくします。この記事ではサンプルコードを組み合わせて、PHPで簡単なオブジェクト指向ファクトリパターンを実装する方法を紹介します。

Java ファクトリ パターンの 3 つの異なる形式の詳細な分析 Java ファクトリ パターンの 3 つの異なる形式の詳細な分析 Feb 18, 2024 pm 01:24 PM

Java ファクトリ パターンはオブジェクトを作成するための設計パターンであり、オブジェクト作成プロセスを抽象化して、実行時にどの特定のクラスをインスタンス化するかを決定できるようにします。インスタンス化ロジックをクライアント コードから分離することで、コードの保守性、柔軟性、拡張性が向上します。ファクトリ パターンには、単純なファクトリ パターン、ファクトリ メソッド パターン、および抽象ファクトリ パターンという 3 つの一般的なバリアントがあります。これら 3 つの亜種については以下で詳細に分析し、具体的なコード例を示します。 1. シンプル ファクトリ パターン シンプル ファクトリ パターン (SimpleFac)

See all articles