C# 设计模式 之 工厂方法

原创 2007年09月23日 00:13:00

 

    为了对一个类进行实例化,通常使用这个类的构成函数,但是有时候出现这类情况:几个类实现了同一个接口,具有同样的操作、返回了同样的抽象类型,不知道该为哪个类型创建对象,因为需要根据条件来控制对哪个类进行实例化,并且此时类的数量可能增减,接口却是稳定的。我们需要工厂方法模式!
   

       我们遇见一个.NET中的经典实例就是枚举器。Enumerator的 GetEnumerator()的方法是一个用了工厂方法模式的例子。这个方法将调用者与需要进行实例化的类隔离开来了。

       需要指出的是并不是能够创建并返回一个对象的方法都是工厂方法。工厂方法模式需要包括一个方法,这个方法创建并返回一个对象,同时客户无需要了解应该具体去实例化哪个类。

      我们再看另外一个例子:  

using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethod
...{
    
/**//// <summary>
    
/// 机器
    
/// </summary>

    public abstract class Machine
    
...{
        
public abstract void Print();
    }


    
/**////<summary>
    
/// 打印机
    
/// </summary>

    public class Printer : Machine
    
...{
        
public override void Print()
        
...{
            Console.WriteLine(
"Printer");
        }

    }


    
/**////<summary>
    
/// 复印机
    
/// </summary>

    public class Copycat : Machine
    
...{
        
public override void Print()
        
...{
            Console.WriteLine(
"Copycat");
        }

    }


    
/**//// <summary>
    
/// MachineFactory 类
    
/// </summary>

    public abstract class MachineFactory
    
...{
        
public abstract Machine Create();
    }


    
/**//// <summary>
    
/// PrinterFactory 类
    
/// </summary>

    public class PrinterFactory : MachineFactory
    
...{
        
public override Machine Create()
        
...{
            
return new Printer();
        }

    }


    
/**//// <summary>
    
/// CopycatFactory 类
    
/// </summary>

    public class CopycatFactory : MachineFactory
    
...{
        
public override Machine Create()
        
...{
            
return new Copycat();
        }

    }


    
class Program
    
...{
        
static void Main(string[] args)
        
...{
            MachineFactory factory 
= null;
            
//根据条件判断创建哪个对象
            bool conditon = true;
            
if (conditon)
            
...{
                factory 
= new PrinterFactory();
            }

            
else
            
...{
                factory 
= new CopycatFactory();
            }

            Machine machine 
= factory.Create();
            machine.Print();
            Console.ReadLine();
        }

    }

}

c#设计模式- Factory Method模式(工厂方法)

参考文章   http://www.cnblogs.com/zhenyulu/articles/36590.html   http://wenku.baidu.com/view/e9b3a36...

设计模式之工厂方法

  • 2014年08月17日 18:34
  • 87KB
  • 下载

设计模式之工厂方法-例子代码

  • 2015年01月04日 20:45
  • 7KB
  • 下载

【设计模式】C#版三大工厂之简单工厂、工厂方法与抽象工厂

引言         简单工厂、工厂方法、抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽象取了出来,优化了系统的架构,并且增强了系统的扩展性。此篇博客是笔者对学完这三...

设计模式工厂方法的代码演示

  • 2009年11月13日 10:26
  • 9KB
  • 下载

工厂方法设计模式

  • 2012年08月10日 23:00
  • 182KB
  • 下载

浅谈JAVA设计模式之——工厂方法(FactoryMethod)

一、概述             定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。       二、适用性  当一个类不知道它所必须创建...

Java设计模式-工厂方法

  • 2015年01月25日 01:24
  • 9KB
  • 下载

设计模式之工厂方法

  • 2015年12月02日 14:32
  • 9KB
  • 下载

跟着实例学习设计模式(3)-工厂方法(创建型)

工厂方法属于创建型设计模式。 设计意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。        静态工厂使用面向对象的方式,有效的解决了增加新产品...
  • andy_gx
  • andy_gx
  • 2015年07月10日 12:16
  • 561
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 设计模式 之 工厂方法
举报原因:
原因补充:

(最多只允许输入30个字)