设计模式工厂模式 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.运行结果

感觉是不是很神奇啊,这主要利用的是面向对象编程语言的继承特性。慢慢体会吧!

原文地址:https://www.cnblogs.com/LiuShuaiXiaoBuDian/p/2762319.html