圖示即經典 Abstract Factory 結構。新增「必勝客」只需加入:PizzaHutFactory、PizzaHutHamburger、PizzaHutChickenLeg,消費者端完全不變(組態切換)。飲料不在本模式範圍(需其他模式組合)。
public abstract class KuaiCanFactory { // 快餐工廠
public abstract IChickenLeg EatChickenLeg();
public abstract IHamburger EatHamburger();
}
public class MDLFactory : KuaiCanFactory { // 麥當勞
public override IChickenLeg EatChickenLeg() => new MDLChickenLeg();
public override IHamburger EatHamburger() => new MDLHamburger();
}
public class KDJFactory : KuaiCanFactory { // 肯德基
public override IChickenLeg EatChickenLeg() => new KDJChickenLeg();
public override IHamburger EatHamburger() => new KDJHamburger();
}
// 產品介面
public interface IHamburger { void GetHamburger(); }
public interface IChickenLeg { void GetChickenLeg(); }
// 具體產品
public class MDLHamburger : IHamburger { public void GetHamburger() => Console.WriteLine("麥當勞漢堡"); }
public class KDJHamburger : IHamburger { public void GetHamburger() => Console.WriteLine("肯德基漢堡"); }
public class KDJChickenLeg : IChickenLeg { public void GetChickenLeg() => Console.WriteLine("肯德基雞腿"); }
public class MDLChickenLeg : IChickenLeg { public void GetChickenLeg() => Console.WriteLine("麥當勞雞腿"); }
// 客戶端
static void Main() {
KuaiCanFactory kc = new KDJFactory();
IChickenLeg leg = kc.EatChickenLeg(); leg.GetChickenLeg();
IHamburger burger = kc.EatHamburger(); burger.GetHamburger();
kc = new MDLFactory();
leg = kc.EatChickenLeg(); leg.GetChickenLeg();
burger = kc.EatHamburger(); burger.GetHamburger();
}
肯德基雞腿 肯德基漢堡 麥當勞雞腿 麥當勞漢堡
吃飽囉~希望別吃壞肚子,有誤請留言指正!