前言 抽象工廠模式介紹,以品牌建立各個產品來實作抽象工廠模式 抽象工廠模式算是比較少用的工廠模式,抽象工廠模式會將各個產品分成一個種類,此工廠可以產生種類的任一產品
實作工廠模式 流程介紹
1.建立抽象Mouse和Keyboard
2.建立實體品牌Intel和Acer的Mouse及Keyboard
3.建立抽象Factory
4.建立實體品牌Intel和Acer的Factory
5.產生兩個品牌的產品
程式碼呈現 abstract 滑鼠和abstract 鍵盤
1 2 3 4 5 6 7 abstract class Mouse { abstract public void MouseInfo () ; } abstract class Keyboard { abstract public void KeyboardInfo () ; }
實作intel及acer的滑鼠和鍵盤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class IntelMouse : Mouse { public override void MouseInfo () { Console.WriteLine("Intel滑鼠" ); } } class AcerMouse : Mouse { public override void MouseInfo () { Console.WriteLine("Acer滑鼠" ); } } class IntelKeyboard : Keyboard { public override void KeyboardInfo () { Console.WriteLine("Intel鍵盤" ); } } class AcerKeyboard : Keyboard { public override void KeyboardInfo () { Console.WriteLine("Acer鍵盤" ); } }
abstract 工廠
1 2 3 4 abstract class Factory { public abstract Keyboard createKeyboard () ; public abstract Mouse createMouse () ; }
實作intel及acer工廠
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class IntelFactoy : Factory { public override Keyboard createKeyboard () { return new IntelKeyboard(); } public override Mouse createMouse () { return new IntelMouse(); } } class AcerFactoy : Factory { public override Keyboard createKeyboard () { return new AcerKeyboard(); } public override Mouse createMouse () { return new AcerMouse(); } }
產生兩個品牌產品
1 2 3 4 5 6 7 8 9 10 11 12 13 static void Main (string [] args ){ IntelFactoy IntelFactoy = new IntelFactoy(); AcerFactoy acerFactoy = new AcerFactoy(); var intelkeyboard=IntelFactoy.createKeyboard(); var intelmouse=IntelFactoy.createMouse(); var acerkeyboard = acerFactoy.createKeyboard(); var acermouse = acerFactoy.createMouse(); intelkeyboard.KeyboardInfo(); intelmouse.MouseInfo(); acerkeyboard.KeyboardInfo(); acermouse.MouseInfo(); }
顯示結果
結語 優點: 1.改善了工廠模式每建立一個產品需再建立一個工廠
缺點: 抽象模式對新增新產品不符合開閉原則。如要生產顯示器,不僅要新增顯示器抽象類和顯示器具體類,還需要修改Factory,在抽象工廠中新增一個CreateDisplay抽象方法(或介面),intel工廠和acer工廠也要實現新增的抽象方法(或者介面)。