設計模式:
抽象工廠模式(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 }
運行結果:
源代碼工程文件下載