简单工厂的基本工作流程是:

  上层应用发出请求,我想要一个实例 ----> 工厂接受到请求,创建一个实例 ----> 工厂将实例返回给上层 ----> 上层应用成功拿到想要的实例,结束

  单看工作流,你可能觉得他好像和工厂方法模式非常相似,但是其实,他俩针对的点却是不同的。关于简单工厂模式的实现,我举一个小商店的例子来进行演示:

  首先,先说明需求,假设我们的商店只经营一种商品,但是具体卖的是什么商品,我们希望上层是不知情的,而是下层来指定,且可以随意的更改,更改的时候,所有的代码不用发生一丝一毫的改变(不改变不加减任何代码),那我们该如何做呢?

  首先,我们先定义一个接口 IProduct

 1     /// <summary>
 2     /// 商品接口
 3     /// </summary>
 4     public interface IProduct
 5     {
 6         /// <summary>
 7         /// 商品展示自己
 8         /// </summary>
 9         void Show();
10     }

  然后我们的每一件商品都去继承这个接口

 1     /// <summary>
 2     /// 电脑
 3     /// </summary>
 4     public class Computer : IProduct
 5     {
 6         public void Show()
 7         {
 8             Console.WriteLine("我是性价比非常高的电脑");
 9         }
10     }

  接着,添加一个单例,作为工厂,用来创建实例。

 1     /// <summary>
 2     /// 商品实例工厂
 3     /// </summary>
 4     public static class Factory
 5     {
 6         private static readonly IConfigurationRoot _configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
 7 
 8         /// <summary>
 9         /// 创建实例
10         /// </summary>
11         /// <returns></returns>
12         public static IProduct CreateInstance()
13         {
14             string assemlyName = _configuration["assemblyName"];
15             string typeName = _configuration["typeName"];
16             var result = Activator.CreateInstance(assemlyName, typeName).Unwrap();// 反射的形式创建实例    
17             return result  as IProduct;
18         }
19     }

  字段 _configuration ,代表的是一个配置文件读取实例。因为本项目是一个.net core 3.1环境下的控制台程序,所以关于配置文件的读写,需要引用三个包:

SimpleFactory(简单工厂模式)

 

 

   然后在控制台项目中添加一个json文件,属性里面设置为始终复制。

SimpleFactory(简单工厂模式)

 

1 {
2   "assemblyName": "SimpleFactoryLib",
3   "typeName": "SimpleFactoryLib.Products.Computer"
4 }

 

   最后在上层我们只需要向工厂发出请求即可

1         static void Main(string[] args)
2         {
3             IProduct product = Factory.CreateInstance();
4             product.Show();
5 
6             Console.ReadKey();
7         } 

SimpleFactory(简单工厂模式)

  当我们的商店需要更换商品的时候,只需修改配置文件即可,但如果是想额外添加别的商品,也只需把新的商品代码类库的dll文件放入到该控制台项目根目录下,然后配置文件做好相应配置就OK。这样就实现了,当我们想修改的时候,无需修改任何代码,一个配置文件,即可灵活的切换需求,实现程序的可配置。

  目前我们实现的时候程序的可配置,但他并不提供扩展。如果希望将来这些代码,还能可扩展,关于这个,请看下一篇文章,工厂方法模式。

相关文章:

  • 2021-06-19
  • 2021-07-20
  • 2021-08-17
  • 2021-10-29
  • 2022-12-23
  • 2021-12-13
  • 2022-02-05
  • 2021-07-13
猜你喜欢
  • 2021-06-26
  • 2021-10-28
  • 2021-08-05
  • 2022-12-23
  • 2022-01-05
  • 2022-02-02
  • 2022-12-23
相关资源
相似解决方案