zoukankan      html  css  js  c++  java
  • 简单工厂模式(转)

      简单工厂模式的实现。

      假如我的程序中有需要一系列的对象,比如bed,desk,chair…, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活。再此它们显然是一类的,都是furniture,既然如此,我们只要一个生产家具的工厂就可以.我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象.

      先定义一个类,主要声明一个家具接口,床和椅子的类:
    Public interface IFurniture
    {}
    public class Bed:IFurniture
    {
     
    public Bed()
     {
      Console.WriteLine(
    "I need a bed!");
     }
    }
    public class Desk:IFurniture
    {
     
    public Desk()
     {
      Console.WriteLine(
    "I need a desk!");
     }
    }
    public class Chair:IFurniture
    {
     
    public Chair()
     {
      Console.WriteLine(
    "I need a chair!");
     }
    }

      再定义一个家具工厂的类(可以利用反射机制中Type类获取Name指定的类名的类的Type信息,然后可以根据这个信息利用System.Activator创建对象):

     

    public class FurnitureFactory
    {
     
    public IFurniture MakeFurniture(string Name)
     {
      IFurniture MyFurniture 
    = null;
      
    try
      {
       Type type 
    = Type.GetType(Name,true);
       MyFurniture 
    = (IFurniture)Activator.CreateInstance(type);
      }
      
    catch (TypeLoadException e)
       Console.WriteLine(
    "I dont know this kind of furniture,
          exception caught - {0}" ,e.Message);
       return MyFurniture;
     }
    }

    然后在以客户端进行程序调用:

    string FurnitureName = Console.ReadLine();
    IFurniture MyFurniture;
    FurnitureFactory MyFurnitureFactory 
    = new FurnitureFactory();
    MyFurniture 
    = MyFurnitureFactory.MakeFurniture(FurnitureName);

      就这样预期想实现的,通过这样就实现了.当然这个例子比较简单,但是它却通过工厂模式的思想实现了代码的灵活性.应用软件系统开发中,有许多地方可以考 虑使用工厂模式.比如在写数据层的代码时候,考虑到程序的可移植性,可拓展性,面向不同的数据库时,采用工厂模式不为是一件理想的实现方式.

     
  • 相关阅读:
    avalon.js 多级下拉框实现
    提取 ECharts 中的svg地图信息
    avalon.js实践 svg地图配置工具
    基于HTML Canvas实现“指纹识别”技术
    HTML5 Canvas指纹及反追踪介绍
    百度Openrasp开源的应用运行时自我保护产品,安装教程。
    浏览器指纹实现
    centos监控web目录www下的文件是否被黑、挂马的脚本
    Linux下文件完整性监控工具Tripwire详解
    在CentOS 7上使用Tripwire监控和检测修改的文件
  • 原文地址:https://www.cnblogs.com/petitprince/p/1877805.html
Copyright © 2011-2022 走看看