C#設計模式--抽象工廠模式


0.C#設計模式-簡單工廠模式

1.C#設計模式--工廠方法模式

設計模式:

抽象工廠模式(Abstract factory pattern)

在前幾篇文章張分別介紹了工廠方法模式,簡單工廠模式

簡單工廠模式:

簡單工廠模式的工廠類隨着產品類的增加需要增加額外的代碼

工廠方法模式:

工廠方法模式每個具體工廠類只完成單個實例的創建,所以它具有很好的可擴展性

但是在實際應用中,一個工廠不止會創建單一的產品,因為現在的工廠都多元化了,一個工廠創建一系列的產品,這就引入了抽象工廠的概念。

抽象工廠模式

抽象工廠模式是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。在抽象工廠模式中,接口是負責創建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。

實例:

下面以一個生產手機主要配件為例子,假設手機工廠需要生產手機屏幕和手機主板,倆條生產線,那么不同品牌的手機工廠生產出的屏幕和主板各不相同。

工廠方法模式類圖:

 

抽象工廠模式C#代碼舉例:

AbstractFactory抽象工廠類

 1     /// <summary>
 2     /// 抽象工廠類:提供創建不同品牌的手機屏幕和手機主板
 3     /// </summary>
 4     public abstract class AbstractFactory
 5     {
 6         //工廠生產屏幕
 7         public abstract Screen CreateScreen();
 8         //工廠生產主板
 9         public abstract MotherBoard CreateMotherBoard();
10     }

 


手機屏幕和主板基類


 

Screen手機屏幕類

1      /// <summary>
2     /// 屏幕抽象類:提供每一品牌的屏幕的繼承
3     /// </summary>
4     public abstract class Screen
5     {
6         public abstract void print();
7     }

MotherBoard手機主板類

1     /// <summary>
2     /// 主板抽象類:提供每一品牌的主板的繼承
3     /// </summary>
4     public abstract class MotherBoard
5     {
6         public abstract void print();
7     }

蘋果手機屏幕和主板類



AppleScreen蘋果手機屏幕類

 1     /// <summary>
 2     /// 蘋果手機屏幕
 3     /// </summary>
 4     public class AppleScreen:Screen
 5     {
 6         public override void print()
 7         {
 8             Console.WriteLine("蘋果手機屏幕!");
 9         }
10     }

 AppleMotherBoard蘋果手機主板類

 1     /// <summary>
 2     /// 蘋果手機主板
 3     /// </summary>
 4     public class AppleMotherBoard:MotherBoard
 5     {
 6         public override void print()
 7         {
 8             Console.WriteLine("蘋果手機主板!");
 9         }
10     }

小米手機屏幕和主板類


XiaoMiScreen小米手機屏幕類

 1     /// <summary>
 2     /// 小米手機屏幕
 3     /// </summary>
 4     public class XiaoMiScreen:Screen
 5     {
 6         public override void print()
 7         {
 8             Console.WriteLine("小米手機屏幕!");
 9         }
10     }

XiaoMiMotherBoard小米手機主板類

 1     /// <summary>
 2     /// 小米手機主板類
 3     /// </summary>
 4     public class XiaoMiMotherBoard :MotherBoard
 5     {
 6         public override void print()
 7         {
 8             Console.WriteLine("小米手機主板!");
 9         }
10     

蘋果手機工廠類和小米手機工廠類


 

AppleFactory蘋果手機工廠類

 1     /// <summary>
 2    /// 蘋果手機工廠
 3    /// </summary>
 4     public class AppleFactory : AbstractFactory
 5     {
 6         /// <summary>
 7         /// 生產蘋果手機屏幕
 8         /// </summary>
 9         /// <returns></returns>
10         public override Screen CreateScreen()
11         {
12             return new AppleScreen();
13         }
14 
15         /// <summary>
16         /// 生產蘋果手機主板
17         /// </summary>
18         /// <returns></returns>
19         public override MotherBoard CreateMotherBoard()
20         {
21             return new AppleMotherBoard();
22         }
23     }

XiaoMi手機工廠類

 1     /// <summary>
 2     /// 小米手機工廠類
 3     /// </summary>
 4     public class XiaoMiFactory : AbstractFactory
 5     {
 6         /// <summary>
 7         /// 生產小米手機屏幕
 8         /// </summary>
 9         /// <returns></returns>
10         public override Screen CreateScreen()
11         {
12             return new XiaoMiScreen();
13         }
14 
15         /// <summary>
16         /// 生產小米手機主板
17         /// </summary>
18         /// <returns></returns>
19         public override MotherBoard CreateMotherBoard()
20         {
21             return new XiaoMiMotherBoard();
22         }
23     }

工廠測試類


 

 1 class Test
 2     {
 3         static void Main(string[] args)
 4         {
 5             //小米工廠生產小米手機的屏幕和主板
 6             AbstractFactory xiaomiFactory = new XiaoMiFactory();
 7             Screen xiaomiScreen = xiaomiFactory.CreateScreen();
 8             xiaomiScreen.print();
 9             MotherBoard xiaomiMotherBoard = xiaomiFactory.CreateMotherBoard();
10             xiaomiMotherBoard.print();
11 
12             //蘋果工廠生產蘋果手機屏幕和主板
13             AbstractFactory appleFactory = new AppleFactory();
14             Screen appleScreen = appleFactory.CreateScreen();
15             appleScreen.print();
16             MotherBoard appleMotherBoard = appleFactory.CreateMotherBoard();
17             appleMotherBoard.print();
18 
19             Console.Read();
20         }
21     }

運行結果:


 


 源代碼工程文件下載


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM