FactoryMethod(工厂方法模式)

  工厂方法模式其实和简单工厂模式极其的相似,关于这个,可以自行观看我的上一篇文章,进行比较:  简单工厂模式

  接下来举个小商店的例子,使用工厂方法这个设计模式,完成商品的上架。

  首先第一步,自然是先定义一个商品接口,面向接口进行设计

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

  然后我们的商品去继承这个接口,实现 Show 方法

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

  我们的上层表现层,也就是控制台的main方法里,让商品上架

1         static void Main(string[] args)
2         {
3             Console.WriteLine("小店开张啦,买一送一!");
4 
5             IProduct computer = new Computer();
6 
7             Console.ReadKey();
8         }

  然后我们的例子就这样实现了。但是现在其实是没有用到工厂方法模式,接下来,就让我们用工厂方法模式的思维去改造他。

  给 Computer 创建一个工厂类

1     public class ComputerFactory
2     {
3         public Computer GetInstance()
4         {
5             return new Computer();
6         }
7     }

  里面的内容很简单,就是一个GetInstance方法,然后方法具体的实现就是new一个computer对象而已。

  修改上层的main方法

1         static void Main(string[] args)
2         {
3             Console.WriteLine("小店开张啦,买一送一!");
4 
5             //IProduct computer = new Computer();
6             IProduct computer = new ComputerFactory().GetInstance();
7 
8             Console.ReadKey();
9         }

  这里面的区别在于,我们把原来的new操作,改由我们的工厂来实现。看到这里,你可能会觉得,直接new他不香吗?为什么还要这么劳师动众,特地新建一个class来实现一个简单的对象创建问题。

  这里面其实最直观的好处有两个:第一,上层应用程序完全不用关心这个对象是怎么创建的,我只需要了解,这个工厂一定会给我一个怎么样的实例即可,这就使得,我们把焦点从上层挪移到了下层,使上层代码更加稳定。第二,因为对象的创建是在工厂里完成的,这就意味着,在对象创建之前或之后,我们都可以添加一切别的业务逻辑进去,不像之前一样,实例在创建的时候,因为代码是直接在上层写死的,导致无法扩展。

  总结

  工厂方法模式,是非常的吻合开闭原则的。他开放扩展,闭合修改,让上层代码更稳定,下层代码得以有更高的扩展性。

原文地址:https://www.cnblogs.com/shapman/p/12463099.html