意图
定义一个用户创建对象的接口,让子类决定实例化哪一个类。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与设计模式》


浙公网安备 33010602011771号