• 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来实现一个简单的对象创建问题。

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

      总结

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

  • 相关阅读:
    IIS发布MVC出错
    dynamic
    设计模式——简单工厂模式[已了解本质]
    Object和泛型
    sublime Text不能安装插件的解决办法
    .net MVC入门
    windows服务写完之后怎么让它跑起来
    sql数据库连接字符串在APP.config配置文件内的两种写法
    Sql语句里面调用变量
    Sql数据库不能频繁连接
  • 原文地址:https://www.cnblogs.com/shapman/p/12463099.html
Copyright © 2020-2023  润新知