意图
提供一个创建一系列相关和相互依赖对象的借口, 而无须指定它们具体的类
结构和角色
![]()
抽象工厂角色(厨师): 声明一个创建抽象产品对象的操作接口
具体工厂角色(川/湘系厨师): 实现创建具体产品对象的操作
抽象产品角色(水煮鱼,红烧肉): 为一类产品声明一个接口
具体产品角色: 定义一个将被相应的具体工厂创建的对象
解说
/// <summary>
/// 抽象工廠類
/// </summary>
public abstract class 廚師
{
public abstract 水煮魚 CreateFish();
public abstract 紅燒肉 CreateMeat();
![]()
}
![]()
![]()
/// <summary>
/// 具體工廠類
/// </summary>
public class 湘系廚師 : 廚師
{
public override 紅燒肉 CreateMeat)
{
return new 湘系紅燒肉();
}
![]()
public override 水煮魚 CreateFish()
{
return new 湘系水煮魚();
}
}
![]()
![]()
/// <summary>
/// 具體工廠類
/// </summary>
public class 川系廚師 : 廚師
{
public override 紅燒肉 CreateMeat()
{
return new 川系紅燒肉();
}
![]()
public override 水煮魚 CreateFish()
{
return new 川系水煮魚();
}
![]()
![]()
}
![]()
/// <summary>
/// 抽象產品類
/// </summary>
public abstract class 水煮魚
{
//// <summary>
/// 可製作, 可烹飪
/// </summary>
public abstract void Cook();
![]()
/// <summary>
/// 味道
/// </summary>
public abstract string Taste{get;}
![]()
}
![]()
/// <summary>
/// 抽象產品類
/// </summary>
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 "辛辣,可口";
}
}
}
![]()
/// <summary>
/// 具體產品類
/// </summary>
public class 川系紅燒肉 : 紅燒肉
{
public override void Cook()
{
//燒的步驟,方法
Console.WriteLine("先調料, 然後炒肉");
}
![]()
public override string Taste
{
get
{
return "辛辣,可口";
}
}
}
![]()
![]()
/// <summary>
/// 具體產品類
/// </summary>
public class 湘系水煮魚 : 水煮魚
{
public override void Cook()
{
//燒的步驟,方法
Console.WriteLine("先調料, 然後炒肉");
}
![]()
public override string Taste
{
get
{
return "辛辣,可口";
}
}
}
![]()
![]()
/// <summary>
/// 具體產品類
/// </summary>
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 川系廚師();
![]()
水煮魚 fish=f.CreateFish();
紅燒肉 meat=f.CreateMeat();
![]()
![]()
fish.Cook();
Console.WriteLine(fish.Taste);
![]()
meat.Cook();
Console.WriteLine(meat.Taste);
}
}
总结
抽象工厂模式提供了一个创建一系列相关或相互依赖的对象接口
提供一个创建一系列相关和相互依赖对象的借口, 而无须指定它们具体的类
结构和角色

抽象工厂角色(厨师): 声明一个创建抽象产品对象的操作接口
具体工厂角色(川/湘系厨师): 实现创建具体产品对象的操作
抽象产品角色(水煮鱼,红烧肉): 为一类产品声明一个接口
具体产品角色: 定义一个将被相应的具体工厂创建的对象
解说
/// <summary>
/// 抽象工廠類
/// </summary>
public abstract class 廚師
{
public abstract 水煮魚 CreateFish();
public abstract 紅燒肉 CreateMeat();
}

/// <summary>
/// 具體工廠類
/// </summary>
public class 湘系廚師 : 廚師
{
public override 紅燒肉 CreateMeat)
{
return new 湘系紅燒肉();
}
public override 水煮魚 CreateFish()
{
return new 湘系水煮魚();
}
}

/// <summary>
/// 具體工廠類
/// </summary>
public class 川系廚師 : 廚師
{
public override 紅燒肉 CreateMeat()
{
return new 川系紅燒肉();
}
public override 水煮魚 CreateFish()
{
return new 川系水煮魚();
}

}
/// <summary>
/// 抽象產品類
/// </summary>
public abstract class 水煮魚
{
//// <summary>
/// 可製作, 可烹飪
/// </summary>
public abstract void Cook();
/// <summary>
/// 味道
/// </summary>
public abstract string Taste{get;}
}
/// <summary>
/// 抽象產品類
/// </summary>
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 "辛辣,可口";
}
}
}
/// <summary>
/// 具體產品類
/// </summary>
public class 川系紅燒肉 : 紅燒肉
{
public override void Cook()
{
//燒的步驟,方法
Console.WriteLine("先調料, 然後炒肉");
}
public override string Taste
{
get
{
return "辛辣,可口";
}
}
}

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

/// <summary>
/// 具體產品類
/// </summary>
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 川系廚師(); 
水煮魚 fish=f.CreateFish();
紅燒肉 meat=f.CreateMeat();

fish.Cook();
Console.WriteLine(fish.Taste);
meat.Cook();
Console.WriteLine(meat.Taste);
}
}总结
抽象工厂模式提供了一个创建一系列相关或相互依赖的对象接口
参考文献:
《设计模式》
《JAVA与设计模式》


浙公网安备 33010602011771号