设计模式-工厂模式 AbstractFactory(抽象工厂)
工厂模式是对现实生活中工厂的一种高度抽象,它是由一系列的接口(抽象类)架构起来的,是和具体实体类相分离的。
AbstractFactory是工厂的基类,所有工厂都继承自他,他可以生产各种产品。
AbstractProduct是产品的基类,所有实体类都继承自他。
Client是与用户交互的。
示例代码:
根据创建工厂模式的先后顺序创建一下类:
1.AbstractCar(AbstractProductA) and AbstractBicyle(AbstractProductB)
View Code
1 public abstract class AbstractBicycle 2 { 3 public abstract void ShowSelfType(AbstractBicycle bicycle); 4 }
View Code
1 public abstract class AbstractCar 2 { 3 public abstract void ShowSelfType(AbstractCar car); 4 }
2.创建抽象工厂,包含抽象的创建实例的方法(生产产品的方法)
View Code
1 public abstract class AbstractFactory 2 { 3 public abstract AbstractCar CreateAbstractCar(); 4 public abstract AbstractBicycle CreateAbstractBicycle(); 5 }
3.创建分工厂
View Code
1 public class NewAbstractFactory : AbstractFactory 2 { 3 public override AbstractCar CreateAbstractCar() 4 { 5 return new NewCar(); 6 } 7 8 public override AbstractBicycle CreateAbstractBicycle() 9 { 10 return new NewBicycle(); 11 } 12 }
View Code
1 public class OldAbstractFactory : AbstractFactory 2 { 3 public override AbstractCar CreateAbstractCar() 4 { 5 return new OldCar(); 6 } 7 8 public override AbstractBicycle CreateAbstractBicycle() 9 { 10 return new OldBicycle(); 11 } 12 }
4.创建实际的产品(最终的实体类)
View Code
1 public class OldCar : AbstractCar 2 { 3 public override void ShowSelfType(AbstractCar car) 4 { 5 Console.WriteLine(car.GetType().Name); 6 } 7 }
View Code
1 public class NewCar : AbstractCar 2 { 3 public override void ShowSelfType(AbstractCar car) 4 { 5 Console.WriteLine(car.GetType().Name); 6 } 7 }
View Code
1 public class NewBicycle : AbstractBicycle 2 { 3 public override void ShowSelfType(AbstractBicycle bicycle) 4 { 5 Console.WriteLine(bicycle.GetType().Name); 6 } 7 }
View Code
1 public class OldBicycle : AbstractBicycle 2 { 3 public override void ShowSelfType(AbstractBicycle bicycle) 4 { 5 Console.WriteLine(bicycle.GetType().Name); 6 } 7 }
5.创建Client(给用户的客户端)
View Code
1 public class Client 2 { 3 private AbstractBicycle AbstractBicycle; 4 private AbstractCar AbstractCar; 5 6 public Client(AbstractFactory factory) 7 { 8 AbstractBicycle = factory.CreateAbstractBicycle(); 9 AbstractCar = factory.CreateAbstractCar(); 10 } 11 12 public void Run() 13 { 14 AbstractBicycle.ShowSelfType(AbstractBicycle); 15 AbstractCar.ShowSelfType(AbstractCar); 16 } 17 }
6.运行
View Code
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 AbstractFactory oldFactory = new OldAbstractFactory(); 6 AbstractFactory newFactory = new NewAbstractFactory(); 7 8 Client c1 = new Client(oldFactory); 9 Client c2 = new Client(newFactory); 10 11 c1.Run(); 12 c2.Run(); 13 14 Console.Read(); 15 16 } 17 }
7.运行结果
感觉是不是很神奇啊,这主要利用的是面向对象编程语言的继承特性。慢慢体会吧!