C# 設計形式系列教程-籠統工場形式。本站提示廣大學習愛好者:(C# 設計形式系列教程-籠統工場形式)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 設計形式系列教程-籠統工場形式正文
1. 概述
籠統工場形式為一個產物家族供給了同一的創立接口。當須要這個產物家族的某一系列的時刻,可以從籠統工場當選出絕對應的系列來創立一個詳細的工場種別。
2. 籠統工場形式中的腳色
2.1 籠統工場(AbstractFactory):擔負這個腳色的是工場辦法形式的焦點,它是與運用體系貿易邏輯有關的。
2.2 詳細工場(ConcreteFactory):這個腳色直接在客戶真個挪用下創立產物的實例。這個腳色含有選擇適合的產物對象的邏輯,而這個邏輯是與運用體系的貿易邏輯慎密相干的。
2.3 籠統產物(AbstractProduct):擔負這個腳色的類是工場辦法形式所創立的對象的父類,或它們配合具有的接口。
2.4 詳細產物(ConcreteProduct):籠統工場形式所創立的任何產物對象都是某一個詳細產物類的實例。這是客戶端終究須要的器械,其外部必定充斥了運用體系的貿易邏輯。
3. 實例:改換數據庫。現有體系應用的是SqlServer數據庫,它的Licence是付費的,有的客戶想應用收費的數據庫辦事,如Access。有的客戶具有其它數據庫辦事商的Licence,他們也不想應用還要另付費的SqlServer。
3.1 處理這個成績的基本是將運用法式與數據庫解耦,使得運用法式不再依附某一個詳細的數據庫。籠統工場給我們供給懂得決計劃。
3.2 完成類圖
3.3 完成代碼
3.3.1 籠統工場類,供給了創立一組相干或互相依附的對象的接口。
/// <summary> /// 籠統工場類 /// </summary> public interface IDatabaseFactory { IEmployee CreateEmployee(); IUser CreateUser(); }
3.3.2 詳細工場類,供給了創立SqlServer,或Access詳細產物的完成
/// <summary> /// 與SqlServer相干產物的完成 /// </summary> public class SqlServerDatabaseFactory : IDatabaseFactory { public IEmployee CreateEmployee() { return new SqlEmployee(); } public IUser CreateUser() { return new SqlUser(); } } /// <summary> /// 與Access相干產物的完成 /// </summary> public class AccessDatabaseFactory : IDatabaseFactory { public IEmployee CreateEmployee() { return new AccessEmployee(); } public IUser CreateUser() { return new AccessUser(); } }
3.3.3 兩個籠統產物,分離是IUser和IEmployee
/// <summary> /// 籠統產物 /// </summary> public interface IUser { User GetUser(); bool SaveUser(); } /// <summary> /// 籠統產物 /// </summary> public interface IEmployee { Employee GetEmployee(); bool SaveEmployee(); }
3.3.4 詳細產物的完成
/// <summary> /// 與SqlServer相干的詳細產物User /// </summary> public class SqlUser : IUser { public User GetUser() { return null; } public bool SaveUser() { return false; } } /// <summary> /// 與SqlServer相干的詳細產物Employee /// </summary> public class SqlEmployee : IEmployee { public SqlEmployee() { } public Employee GetEmployee() { return null; } public bool SaveEmployee() { return false; } } /// <summary> /// 與Access相干的詳細產物User /// </summary> public class AccessUser : IUser { public AccessUser() { } public User GetUser() { return null; } public bool SaveUser() { return false; } } /// <summary> /// 與Access相干的詳細產物Employee /// </summary> public class AccessEmployee : IEmployee { public AccessEmployee() { } public Employee GetEmployee() { return null; } public bool SaveEmployee() { return false; } }
4. 形式總結
4.1 長處
4.1.1 詳細產物從客戶代碼中被分別出來
4.1.2 輕易轉變產物的系列(如SqlServer產物系列,Access產物系列)
4.1.3 將一個系列的產物族同一到一路創立
4.2 缺陷
在產物族中擴大新的產物是很艱苦的,它須要修正籠統工場的接口,如增長一種產物Customer變得異常艱苦。
4.3 適用規模
4.3.1 一個體系要自力於它的產物的創立、組合和表現時。
4.3.2 一個體系要由多個產物系列中的一個來設置裝備擺設時。
4.3.3 當你要強調一系列相干的產物對象的設計以便停止結合應用時。
4.3.4 當你供給一個產物類庫,而只想顯示它們的接口而不是完成時。
以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。