ホームページ バックエンド開発 C#.Net チュートリアル 0から独学C#09 -- 抽象的なファクトリパターンの例

0から独学C#09 -- 抽象的なファクトリパターンの例

Feb 04, 2017 am 10:52 AM

1. 適用可能な環境

(主に複数の製品が作成される環境、ソフトウェアに複数のスキン、複数のデータベースがある環境で使用されます)

  • システムは、製品クラスのインスタンスがどのように作成され、結合され、詳細が表現されるかに依存すべきではありません、これはあらゆる種類のファクトリー パターンにとって重要です。

  • システムには複数の製品ファミリーがあり、一度に使用される製品ファミリーは 1 つだけです。

  • 同じ製品ファミリーに属する製品は一緒に使用されるため、この制約をシステムの設計に反映する必要があります。

  • システムはプロダクトクラスライブラリを提供し、すべてのプロダクトは同じインターフェースで表示されるため、クライアントは特定の実装に依存しません

2. パターン定義

抽象ファクトリーパターン: 提供されるインターフェース特定のクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成します。 Kit パターンとも呼ばれる抽象ファクトリー パターンは、オブジェクト作成パターンです。

3. パターン構造

Abstract Factory パターンには次の役割が含まれます:

  • AbstractFactory: 抽象ファクトリー

  • ConcreteFactory: コンクリートファクトリー

  • AbstractProduct: 抽象プロダクト

  • 製品: 特定の製品

ファクトリ メソッド パターンをより明確に理解するには、最初に 2 つの概念を導入する必要があります:

  • 製品レベルの構造: 製品レベルの構造は、製品の継承構造です。たとえば、抽象クラスはテレビ、そのサブクラスにはハイアール テレビ、ハイセンス テレビ、TCL テレビがあり、抽象テレビとテレビの特定のブランドの間の製品階層構造を形成します。抽象テレビは親カテゴリであり、特定のブランドのテレビはそのサブカテゴリです。

  • 製品ファミリー: 抽象的な工場モデルでは、製品ファミリーとは、同じ工場で生産され、異なる製品レベルの構造にある製品のグループを指します (ハイアール テレビ、ハイアール電化製品工場で製造されたハイアール冷蔵庫、ハイアール テレビなど)はテレビ製品階層に位置し、ハイアール冷蔵庫は冷蔵庫製品階層に位置します。

0から独学C#09 -- 抽象的なファクトリパターンの例

4. コード

プロセスインターフェース

interface IFlow
    {
        IRxAlign CreateRxAlign();

        IDispensing CreateDispensing();
    }

class FlowA : IFlow
    {        public IRxAlign CreateRxAlign()
        {            return new RxAlignA();
        }        public IDispensing CreateDispensing()
        {            return new DispensingA();
        }
    }


class FlowB : IFlow
    {        public IRxAlign CreateRxAlign()
        {            return new RxAlignB();
        }        public IDispensing CreateDispensing()
        {            return new DispensingB();
        }
    }
ログイン後にコピー

Couplingインターフェース

interface IRxAlign
    { 
        event LocationChange LocChange;        
int[] RoPulse { set; get; }        
int[] FiPulse { set; get; }        
int[] RoMaxStep { set; get; }        
double[] RoRESTarget { set; get; }        
double[] TxP { set; get; }        
double[] RESmin { set; get; }        
double[] RESmax { set; get; }

        Coordinate Location { set; get; }        
void LoadPara(string PN);        
void GoHome();        
void Start();        
void Stop();
    }

class RxAlignA : IRxAlign
    {        private ControlCard card;        
private QSFP28 product;        
private double RESmax, RESmin, RES;        
private double[] TxPower;        
public RxAlignA()
        {            
this.RESmax = 1.0;            
this.RESmin = 0.4;
        }        
public bool ConfigPara()
        {            
try
            {                
this.card = new ControlCard();                
this.product = new QSFP28();               
 return true;
            }            catch
            {                return false;
            }
        }        public void GoHome()
        {            //QSFP28 go home
        }        public void Start()
        {            //QSFP28 start
        }        public void Stop()
        {
            card = null;
            product = null;
        }
        ...
    }

class RxAlignB : IRxAlign
    {        private ControlCard card;        
 private CFP4 product;        
 private double RESmax, RESmin, RES;        
 private double[] TxPower;        
 public RxAlignB()
        {            this.RESmax = 1.0;            
 this.RESmin = 0.4;
        }        public bool ConfigPara()
        {            try
            {                this.card = new ControlCard();                
 this.product = new CFP4();                
 return true;
            }            catch
            {                return false;
            }
        }        public void GoHome()
        {            //CFP4 go home
        }        public void Start()
        {            //CFP4 start
        }        public void Stop()
        {
            card = null;
            product = null;
        }
        ...
    }
ログイン後にコピー

Glueインターフェース

interface IDispensing
    {
        //code
    }class DispensingA : IDispensing
    {
        //code
    }class DispensingB : IDispensing
    {
        //code
    }
ログイン後にコピー

メインスレッド呼び出し

flow = new FlowA();
align = flow.CreateRxAlign();
align.LoadPara(this.comboBoxPN.Text);

dispens = flow.CreateDispensing();
dispens.//code...
ログイン後にコピー

以上は0-Abstract Factoryの独習C#09の内容ですパターンの例 、その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# のアクセス修飾子 C# のアクセス修飾子 Sep 03, 2024 pm 03:24 PM

C# のアクセス修飾子のガイド。 C# のアクセス修飾子の種類について、例と出力とともに説明しました。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# 文字列リーダー C# 文字列リーダー Sep 03, 2024 pm 03:23 PM

C# StringReader のガイド。ここでは、C# StringReader の概要とその動作について、さまざまな例やコードとともに説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# 文字列ライター C# 文字列ライター Sep 03, 2024 pm 03:23 PM

C# StringWriter のガイド。ここでは、C# StringWriter クラスの概要とその動作について、さまざまな例やコードとともに説明します。

See all articles