抽象工厂提供一个建立产品的接口来负责建立相关或依赖的对象,而不具体明确指定具体类。也能够这样理解,它负责建立某一特定系列产品,可是它只提供接口方法。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