设计模式学习笔记--简单工厂模式

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现,学习了此模式可以为后面的很多中模式打下基础。
   简单工厂模式参与者:
      工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 
      抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 
      具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。

 

 下面我们通过一个海产品工厂来实现简单工厂模式:
     一、抽象产品角色:

    #region 抽象产品角色:定义接口ISeaFood
    
//抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 
    
//在本例中就是ISeaFood接口
    public interface ISeaFood
    {
        
//定义在此接口中需要实现的方法
        void TradeIn(); //买入
        void Keep();//喂养
        void TradeOut(); //卖出
    }
    
#endregion

     二、具体产品角色:

    具体产品角色:定义相关的SeaFood产品类

     三、工厂类:

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

namespace SeafoodSimpleFactory
{
    
工厂类:实现SeaFood简单工厂
}


     四、客户调用:

 

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

namespace SeafoodSimpleFactory
{
    
class Program
    
{

        
static void Main(string[] args)
        
{
            
工厂方式一

            
工厂方式二 
 
        }

    }

}

此模式优缺点
   1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。
   2、当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
   3、系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂,违背了"开放--封闭"原则(OCP).另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

前往:设计模式学习笔记清单
posted @ 2009-09-22 11:58  wsdj  阅读(1421)  评论(0编辑  收藏  举报