抽象工廠提供一個建立產品的接口來負責建立相關或依賴的對象,而不具體明確指定具體類。也能夠這樣理解,它負責建立某一特定系列產品,可是它只提供接口方法。ide
假如咱們去理髮店,給師傅說剪個平頭,師傅可能使用推子;剪個殺馬特,師傅可能會使用剪刀。咱們說出理髮的需求,理髮師傅就會用不一樣的處理方法知足咱們的需求,咱們把需求抽象,這樣咱們就能夠增長具體類來豐富咱們的需求;一樣,咱們把方法抽象,咱們也能夠來豐富咱們的處理方法。這樣,咱們就不須要修改咱們的源代碼,直接增長需求和方法的具體類,增長了代碼的可擴展性。(開放-閉合原則:對擴展開放,對修改關閉)spa
這裏涉及到2個抽象類,即需求和方法:code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace AbstractFactory 7 { 8 //需求 抽象類 9 public abstract class Factory 10 { 11 public abstract Method HairStyle(); 12 } 13 14 //方法 抽象類 15 public abstract class Method 16 { 17 public abstract void UseMethod(); 18 } 19 20 /// <summary> 21 /// 平頭 22 /// </summary> 23 public class pingtouFactory : Factory 24 { 25 public override Method HairStyle() 26 { 27 Console.WriteLine(" 需求: 平頭"); 28 return new pingtouMethod(); 29 } 30 } 31 public class pingtouMethod : Method 32 { 33 public override void UseMethod() 34 { 35 Console.WriteLine(" 方法: 平頭\n"); 36 } 37 } 38 // 39 40 /// <summary> 41 /// 殺馬特 42 /// </summary> 43 public class shamateFactory : Factory 44 { 45 public override Method HairStyle() 46 { 47 Console.WriteLine(" 需求: 殺馬特"); 48 return new shamateMethod(); 49 } 50 } 51 public class shamateMethod : Method 52 { 53 public override void UseMethod() 54 { 55 Console.WriteLine(" 方法: 殺馬特\n"); 56 } 57 } 58 59 class Program 60 { 61 static void Main(string[] args) 62 { 63 Factory p = new pingtouFactory(); 64 p.HairStyle().UseMethod(); 65 66 Factory s = new shamateFactory(); 67 s.HairStyle().UseMethod(); 68 } 69 } 70 }
若是咱們還須要其餘髮型,咱們只須要增長需求髮型的具體類和方法類便可。不須要修改原來的代碼。對象
可是這裏的需求和方法是一一對應的,咱們並不能增長一個需求的另一種或者多種方法。由於接口只有一個,增長多種方法,就須要修改抽象接口類。blog