zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂模式

      简单工厂模式---顾名思义,就是有一个工厂,你用它可以生产不同的产品,当然产品的生产细节你不需要知道,你只负责得到产品,生产过程都封装在工厂内部。简言之,就是一个工厂,你要告诉他你想要的产品名称,他就给你输出产品。

      下面我们举个例子简单说明一下。你和朋友去吃肯德基,你告诉服务员我要鸡翅,你朋友说我要炸土豆条。过了一会,你们要得东西就来了,但是他们怎么做的你们不知道吧?你们只管开吃就好了。

      用代码实现该过程:

      首先,定义一个接口:用来获取不同产品

    1 public interface IFood
    2     {
    3         void get();
    4     }

      然后,分别用两个类继承实现IFood接口:分别得到鸡腿和炸土豆条

     1 public class McChicken:IFood
     2     {
     3         public void get()
     4         {
     5             Console.WriteLine("I want McChicken!");
     6         }
     7     }
     8 
     9 public class Chips:IFood
    10     {
    11         public void get()
    12         {
    13             Console.WriteLine("I want Chips!");
    14         }
    15     }

      接下来,就要建工厂来控制制造不同的产品了:

     1  public class FoodFactory
     2      {
     3          public static IFood GetFood(string type)
     4          {
     5              string foodType = "FactoryMode" + '.' + type;
     6              return (IFood)Assembly.Load("FactoryMode").CreateInstance(foodType);//反射:Assembly.Load("程序集").CreateInstance("命名空间.类")
     7          }
     8      }
    9
      不习惯反射的就用下面的代码:效果是一样的 10 public class FoodFactory 11 { 12 public static IFood GetFood(string type) 13 { 14 if (type.Equals("McChicken")) 15 return new McChicken(); 16 if (type.Equals("Chips")) 17 return new Chips(); 18 else return null; 19 } 20 }

      最后,来测试一下我们的工厂吧。

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             IFood mcChiken = FoodFactory.GetFood("McChicken");
     6             IFood chips = FoodFactory.GetFood("Chips");
     7             mcChiken.get();
     8             chips.get();
     9             Console.ReadLine();
    10         }
    11     }

    输出结果:I want McChicken!

         I want Chips!

  • 相关阅读:
    C#与数据库访问技术总结(三)之 Connection对象的常用方法
    ConnectionState详解
    SQL Server 中 RAISERROR 的用法
    C# 捕获数据库自定义异常
    "在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"
    查询sql语句的执行时间
    c# 多线程 创建对象实例
    C#中IDisposable的用法-垃圾回收
    c#中的引用类型和值类型
    C++运行出现"what(): std::bad_alloc"的解决办法
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/2999081.html
Copyright © 2011-2022 走看看