博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

設計模式(2):工廠方法模式(Factory Methed Pattern)

Posted on 2006-05-29 11:50  donald  阅读(288)  评论(0)    收藏  举报

意图

定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

结构和角色

抽象工厂角色(厨师):    声明一个工厂方法, 该方法返回一个抽象产品角色对象
具體工廠角色(湘系廚師,川系廚師):重定义工厂方法以返回具体产品角色对象
抽象产品角色(水煮魚):     定义工厂创建对象的借口
具体产品角色(湘系水煮鱼,川系水煮魚):    工厂创建的具体产品

解说


/// <summary>
/// 抽象工廠類
/// </summary>

public abstract class 廚師
{
    
public abstract 水煮魚 Create();
    
    
}


/// <summary>
/// 具體工廠類
/// </summary>

public class 湘系廚師 : 廚師
{
    
public override 水煮魚 Create()
    
{
        
return new 湘系水煮魚();
    }


}


/// <summary>
/// 具體工廠類
/// </summary>

public class 川系廚師 : 廚師
{
    
public override 水煮魚 Create()
    
{
        
return new 川系水煮魚();
    }


}


public abstract class 水煮魚
{
    
///<summary>
    
/// 可製作, 可烹飪
    
/// </summary>

    public abstract void Cook();

    
///<summary>
    
/// 味道
    
/// </summary>

    public abstract string Taste{get;}

}


/// <summary>
/// 具體廠品類
/// </summary>

public class 川系水煮魚 : 水煮魚
{
    
public override void Cook()
    
{
        
//燒的步驟,方法
        Console.WriteLine("先調料, 然後炒肉");
    }


    
public override string Taste
    
{
        
get
        
{
            
return "辛辣,可口";
        }

    }

}


public class 湘系水煮魚 : 水煮魚
{
    
public override void Cook()
    
{
        
//燒的步驟,方法
        Console.WriteLine("先調料, 然後炒肉");
    }


    
public override string Taste
    
{
        
get
        
{
            
return "辛辣,可口";
        }

    }

}

客戶端代碼


    
/// <summary>
    
/// Client 的摘要描述。
    
/// </summary>

    public class Client
    
{
        
public Client()
        
{
            
//
            
// TODO: 在此加入建構函式的程式碼
            
//
        }

        [STAThread]
        
public static void Main(string[] args)
        
{
            廚師 f
=new 湘系廚師();//  new 川系廚師(); 

            水煮魚 foot
=f.Create();

            foot.Cook();
            Console.WriteLine(foot.Taste);

        }

    }

通過工廠方法模式,客戶端代碼不再依賴具體產品類

总结
Factory Method 模式是应用最为广泛的设计模式



参考文献:
《设计模式
JAVA与设计模式