简单工厂的定义
简单工厂负责创建对象的细节工作, 通过传入的类型参数, 建立并返回不同类型的对象.
.Net Core实现简单工厂
Pizza.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| using System; using System.Collections.Generic;
namespace SimpleFactory.Pizzas { public abstract class Pizza { public string Name { get; protectes set; } public string Dough { get; protectes set; } public string Sauce { get; protectes set; } protected List<string> Toppingd = new List<string>();
public void Prepare() { Console.WriteLine($"Preparing:{Name}"); Console.WriteLine($"Tossing:{Dough}"); Console.WriteLine($"Adding sauce:{Sauce}"); Console.WriteLine($"Adding toppings"); Toppings.ForEach(x => Console.WriteLine($"{x}")); }
public void Bake() { Console.WriteLine("Bake for 25 minutes"); }
public void Cut() { Console.WriteLine("Cutting the pizza into diagnol slices"); }
public void Box() { Console.WriteLine("Placing pizza in official PizzaStore box......"); } } }
|
CheesePizza.cs
1 2 3 4 5 6 7 8 9 10 11 12 13
| namespace SimpleFactory.Pizzas { public class CheesePizza: Pizza { public CheesePizza() { Name = "Cheese Pizza"; Dough = "Think Dough"; Sauce = "Salad"; Toppings.Add("Grated ReggianoCheese"); } } }
|
ClamPizza.ca
1 2 3 4 5 6 7 8 9 10 11 12 13
| namespace SimpleFactory.Pizzas { public class ClamPizza: Pizza { public ClamPizza() { Name = "Clam Pizza"; Dough = "Soft Dough"; Sauce = "Tomato sauce"; Toppings.Add("Shrimp meat"); } } }
|
SimplePizzaFactory
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| using SimpleFactory.Pizzas;
namespace SimpleFactory { public class SimplePizzaFactory { public Pizza CreatePizza(string type) { Pizza pizza = null; switch(type) { case "cheese": pizza = new CheesePizza(); break; case "clam": pizza = new ClamPizza(); break; } return pizza; } } }
|
PizzaStore.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| using SimpleFactory.Pizzas;
namespace SimpleFactory { public class PizzaStore { private readonly SimplePizzaFactory _factory;
public PizzaStore(SimplePizzaFactory factory) { _factory = factory; }
public Pizza OrderPizza(string type) { var pizza = _factory.CreatePizza(type); pizza.Prepare(); pizza.Bake(); pizza.Cut(); pizza.Box(); return pizza; } } }
|
Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| using System; namespace SimpleFactory { class Program { static void Main(string[] args) { var pizzaStore = new PizzaStore(new SimplePizzaFactory()); var cheesePizza = pizzaStore.OrderPizza("cheese"); var clamPizza = pizzaStore.OrderPizza("clam"); Consloe.ReadKey(); } } }
|
工厂方法的定义
工厂方法把对象创建的动作交给了子类, 并让它决定创建哪些对象.
.Net Core实现工厂方法
ChicagoCheesePizza.cs
1 2 3 4 5 6 7 8 9 10 11 12 13
| namespace FactoryMethodPattern.Pizzas { public class ChicagoCheesePizza: Pizza { public ChicagoCheesePizza() { Name = "Chicago Cheese Pizza"; Dough = "Think Dough"; Sauce = "Salad"; Toppings.Add("Grated ReggianoCheese"); } } }
|
ChicagoClamPizza.cs
1 2 3 4 5 6 7 8 9 10 11 12 13
| namespace FactoryMethodPattern.Pizzas { public class ChicagoClamPizza: Pizza { public ChicagoClamPizza() { Name = "Chicago Clam Pizza"; Dough = "Soft Dough"; Sauce = "Tomato sauce"; Toppings.Add("Shrimp meat"); } } }
|
PizzaStore.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| using FactoryMethodPattern.Pizzas;
namespace FactoryMethodPattern { public abstract class PizzaStore { public Pizza OrderPizza(string type) { var pizza = CreatePizza(type); pizza.Prepare(); pizza.Bake(); pizza.Cut(); pizza.Box(); return pizza; }
protected abstract Pizza CreatePizza(string type); } }
|
ChicagoPizzaStore.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| using FactoryMethodPattern.Pizzas;
namespace FactoryMethodPattern { public class ChicagoPizzaStore:PizzaStore { protected override Pizza CreatePizza(string type) { Pizza pizza = null; switch(type) { case "cheese": pizza = new ChicagoCheesePizza(); break; case "clam": pizza = new ChicagoClamPizza(); break; } return pizza; } } }
|
Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| using System; namespace FactoryMethodPattern { class Program { static void Main(string[] args) { var chicagoStore = new ChicagoPizzaStore(); var cheesePizza = chicagoStore.OrderPizza("cheese"); var clamPizza = chicagoStore.OrderPizza("clam"); Consloe.ReadKey(); } } }
|