0から独学C#09 -- 抽象的なファクトリパターンの例
1. 適用可能な環境
(主に複数の製品が作成される環境、ソフトウェアに複数のスキン、複数のデータベースがある環境で使用されます)
システムは、製品クラスのインスタンスがどのように作成され、結合され、詳細が表現されるかに依存すべきではありません、これはあらゆる種類のファクトリー パターンにとって重要です。
システムには複数の製品ファミリーがあり、一度に使用される製品ファミリーは 1 つだけです。
同じ製品ファミリーに属する製品は一緒に使用されるため、この制約をシステムの設計に反映する必要があります。
システムはプロダクトクラスライブラリを提供し、すべてのプロダクトは同じインターフェースで表示されるため、クライアントは特定の実装に依存しません
2. パターン定義
抽象ファクトリーパターン: 提供されるインターフェース特定のクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成します。 Kit パターンとも呼ばれる抽象ファクトリー パターンは、オブジェクト作成パターンです。
3. パターン構造
Abstract Factory パターンには次の役割が含まれます:
AbstractFactory: 抽象ファクトリー
ConcreteFactory: コンクリートファクトリー
-
AbstractProduct: 抽象プロダクト
-
製品: 特定の製品
ファクトリ メソッド パターンをより明確に理解するには、最初に 2 つの概念を導入する必要があります:
製品レベルの構造: 製品レベルの構造は、製品の継承構造です。たとえば、抽象クラスはテレビ、そのサブクラスにはハイアール テレビ、ハイセンス テレビ、TCL テレビがあり、抽象テレビとテレビの特定のブランドの間の製品階層構造を形成します。抽象テレビは親カテゴリであり、特定のブランドのテレビはそのサブカテゴリです。
製品ファミリー: 抽象的な工場モデルでは、製品ファミリーとは、同じ工場で生産され、異なる製品レベルの構造にある製品のグループを指します (ハイアール テレビ、ハイアール電化製品工場で製造されたハイアール冷蔵庫、ハイアール テレビなど)はテレビ製品階層に位置し、ハイアール冷蔵庫は冷蔵庫製品階層に位置します。
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(); } }
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; } ... }
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...

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











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

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

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

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