在园子混迹许久,每日看一些大神的佳作,深感受益匪浅,进而萌生了分享一些知识的想法。当然,作为一个屌丝程序员分享不了多么高大上的知识,只是把平时工作中积累的一些东西共享出来,希望大神们手下留情,不要拍的太狠。呵呵,闲言少叙,书归正传。 
简单工厂和工厂方法 
  GOF创造了设计模式这个家族,为我们写出更面向对象的代码提供了便利。相对于这个家族几乎代代单传,工厂家族可谓是门丁兴旺,今天主要来体验下简单工厂和工厂方法。 
  这里要说一个题外话,简单工厂模式不属于GOF创造的23种设计模式,最多算一个临时工,出了问题的时候,上镜率较高。 
  简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实 
现。 
  简单点说,可以讲工厂模式比喻成淘宝商铺,而Creator的角色淘宝卖家。对于买家来说,只需要告诉卖家自己要什么,至于这个东西从那个货架下来,进货价格是多少(应该不会有好心的卖家告诉你进货价格是多少吧),就和客户没一毛钱关系没有了,因为这些具体的实现细节是没有必要也是不应该告诉调用曾的。 
看一下类图:  
示例代码: 
public class Creator 
    { 
        private Product product; 
        public Product Product 
        { 
            get 
            { 
                return product; 
            } 
        } 
        private Product CreateProduct(int type) 
        { 
            switch (type ) 
            { 
                case 1: 
                    product = new ProductA(); 
                    break; 
                case 2: 
                    product = new ProductB(); 
                    break; 
                case 3: 
                    product = new ProductC(); 
                    break; 
                default: 
                    product = null; 
                    break; 
            } 
            return null; 
        } 
    } 
  在Creator类中,由CreateProduct方法返回Product的一个实例,具体实例化哪一个类由CreateProduct的逻辑决定。使用这个模式,我们可以轻松的将客户端对具体产品的依赖去除。 
  请大家养成一个好习惯,在写完代码后可以去对照SOLID原则来审查一下自己的代码。我们明显的可以发现,Creator类违反了开闭原则(OCP)。当我们增加一个Product实现的时候,就必然的需要在Creator类中修改CreateProduct方法。这时候就需要工厂方法出马了。 
  工厂方法模式(Factory Method)定义了一个用于创建对象的接口,让子类来决定实例化哪一个类。工厂方法使一个类的实例化被延迟到其子类。 
类图: 
原文:http://www.cnblogs.com/zmwang/p/4403377.html