我也设计模式——1.Factory Method

工厂方法模式,就是使一个类的实例化延迟到子类——惰性声明
UML图如下:

    public class Production { }

    
public abstract class Creator
    
{
        
public abstract Production FactoryMathod();
    }


    
public class ConcreteCreator : Creator
    
{
        
public override Production FactoryMathod()
        
{
            
return new Production();
        }

    }

工厂方法模式无处不在,创建型模式都是依赖于工厂模式的。

简单工厂Simple Factory,这是工厂方法模式的一个特例,因为该模式是通过switch分支(也有用if判断的),来决定最终生成哪一个对象的,而这个switch分支语句,嵌在一个静态方法中,这个改装就是简单工厂。


    public abstract class A
    
{
        
public abstract void Do();
    }


    
public class A1 : A
    
{
        
public override void Do()
        
{
            Console.WriteLine(
"A1");
        }

    }


    
public class A2 : A
    
{
        
public override void Do()
        
{
            Console.WriteLine(
"A2");
        }

    }


    
public class CreateA
    
{
        
public static A CreateAFactory(int type)
        

            
switch(type)
            
{
                
case 1:
                    
return new A1();
                    
break;
                
case 2:
                
default:
                    
return new A2();
                    
break;
            }

        }

    }

在Client端,只要使用            CreateA.CreateAFactory(1).Do();    就可以生成需要的对象

简单工厂的缺点是,一旦增加新产品类,同时要实现抽象类中的所有方法;还有,一旦要修改抽象类中的方法,所有子类都要变动——扩展性差,不符合开闭原则。

另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

posted @ 2007-10-02 00:20  包建强  Views(1357)  Comments(3Edit  收藏  举报