概叙
Simple Factory模式是参数化的工厂方法模式, 工厂类根据提供的标识创建具体产品,被创建的产品共享一个共同的Product借口
角色和结构
![]()
工厂角色(厨师): 创建产品
抽象产品角色(菜): 定义工厂创建对象的借口
具体产品角色(红烧肉,水煮鱼): 工厂创建的具体产品
解说
在简单工厂模式里面,客户端不直接创建具体产品, 而是通过传入具体产品ID给工厂类(Creator)创建, 示例代码如下:
![]()
/// <summary>
/// 菜類(抽象產品)
/// </summary>
public abstract class Foot
{
/// <summary>
/// 可製作, 可烹飪
/// </summary>
public abstract void Cook();
/// <summary>
/// 味道
/// </summary>
public abstract string Taste{get;}
![]()
}
![]()
![]()
![]()
/// <summary>
/// 紅燒肉類(具體產品)
/// </summary>
public class Meet : Foot
{
public override void Cook()
{
//燒的步驟,方法
Console.Write("先調料, 然後炒肉");
}
![]()
public override string Taste
{
get
{
return "辛辣,可口";
}
}
![]()
![]()
}
![]()
![]()
![]()
![]()
/// <summary>
/// 水煮魚類(具體產品)
/// </summary>
public class Fish:Foot
{
![]()
public override void Cook()
{
//燒的步驟,方法
Console.Write("先放水, 等水3分開時, 然後放魚");
![]()
}
![]()
public override string Taste
{
get
{
return "清香,可口";
}
}
}
![]()
public class Cook
{
/// <summary>
/// 廚師類(工廠,Creator)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Foot Create(string name)
{
switch(name)
{
case "Fish":
return new Fish();
case "Meat":
return new Meet();
}
![]()
return null;
}
![]()
}
客戶端代碼如下:
/// <summary>
/// Client 的摘要描述。
/// </summary>
class Client
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Factory _ft=new Factory();
![]()
Foot _foot=_ft.Create("Meat");
//Foot _foot=_ft.Create("Fish");
![]()
![]()
_foot.Cook();
Console.Write(_foot.Taste);
}
}
Simple Factory模式是参数化的工厂方法模式, 工厂类根据提供的标识创建具体产品,被创建的产品共享一个共同的Product借口
角色和结构

工厂角色(厨师): 创建产品
抽象产品角色(菜): 定义工厂创建对象的借口
具体产品角色(红烧肉,水煮鱼): 工厂创建的具体产品
解说
在简单工厂模式里面,客户端不直接创建具体产品, 而是通过传入具体产品ID给工厂类(Creator)创建, 示例代码如下:

/// <summary>
/// 菜類(抽象產品)
/// </summary>
public abstract class Foot
{
/// <summary>
/// 可製作, 可烹飪
/// </summary>
public abstract void Cook();
/// <summary>
/// 味道
/// </summary>
public abstract string Taste{get;}
}


/// <summary>
/// 紅燒肉類(具體產品)
/// </summary>
public class Meet : Foot
{
public override void Cook()
{
//燒的步驟,方法
Console.Write("先調料, 然後炒肉");
}
public override string Taste
{
get
{
return "辛辣,可口";
}
}

}



/// <summary>
/// 水煮魚類(具體產品)
/// </summary>
public class Fish:Foot
{
public override void Cook()
{
//燒的步驟,方法
Console.Write("先放水, 等水3分開時, 然後放魚");
}
public override string Taste
{
get
{
return "清香,可口";
}
}
}
public class Cook
{
/// <summary>
/// 廚師類(工廠,Creator)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Foot Create(string name)
{
switch(name)
{
case "Fish":
return new Fish();
case "Meat":
return new Meet();
}
return null;
}
}客戶端代碼如下:
/// <summary>
/// Client 的摘要描述。
/// </summary>
class Client
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Factory _ft=new Factory();
Foot _foot=_ft.Create("Meat");
//Foot _foot=_ft.Create("Fish");

_foot.Cook();
Console.Write(_foot.Taste);
}
}总结
Simple Factory是一种简化了的工厂方法模式
参考文献:
《设计模式》
《JAVA与设计模式》


浙公网安备 33010602011771号