팩토리 메소드 패턴
10462 단어 csharpprogramming
문제
피자 가게를 만들고 고객에게 제공하는 여러 종류의 피자가 있다고 가정해 보겠습니다. 처음에 저희 가게가 굽고 있는 유일한 피자 종류는 4가지 치즈 피자입니다. 잠시 후 많은 고객이 더 다양한 피자를 요청했고 우리는 메뉴에 페페로니와 그리스 피자를 추가하기로 결정했습니다. 이것은 좋은 소식이지만 우리 코드는 어떻습니까?
해결책
여기에서 Factory Method Pattern이 유용합니다. 패턴은 직접 생성 호출을 팩토리 메소드 호출로 대체할 것을 제안합니다.
구현
가장 먼저 만들 것은 Pizza 추상 클래스입니다.
public abstract class Pizza
{
public string Name { get; set; }
public List<string> Ingredients { get; set; }
public PizzaType Type{ get; set; }
}
그런 식으로 추상 클래스를 구현하는 구체적인 클래스를 만들 것입니다.
class FourCheesePizza : Pizza
{
public FourCheesePizza()
{
Type = PizzaType.FourCheese;
Name = "Cheese passion";
Ingredients = new List<string>
{
"Parmigiano Cheese",
"Gorgonzola Cheese",
"Ricotta Cheese",
"Taleggio Cheese",
"Tomato"
};
}
}
class GreekPizza : Pizza
{
public GreekPizza()
{
Name = "The Greek freak";
Type = PizzaType.Greek;
Ingredients = new List<string>
{
"Spinach",
"Olives",
"Feta Cheese",
"Onion",
"Red Peppers"
};
}
}
class PepperoniPizza : Pizza
{
public PepperoniPizza()
{
Name = "Pepperoni lovers";
Type = PizzaType.Pepperoni;
Ingredients = new List<string>
{
"Basil",
"Peperoni",
"Garlic",
"Tomato",
"Mozzarella Cheese"
};
}
}
다음 단계는 실제 팩토리 인터페이스를 만들고 구현하는 것입니다.
interface IPizzaFactory
{
Pizza CreatePizza(PizzaType type);
}
class PizzaFactory : IPizzaFactory
{
public Pizza CreatePizza(PizzaType type)
{
switch (type)
{
case PizzaType.FourCheese:
return new FourCheesePizza();
case PizzaType.Pepperoni:
return new PepperoniPizza();
case PizzaType.Greek:
return new GreekPizza();
default:
return null;
}
}
}
이제 팩토리를 사용하여 피자 유형 정보를 전달하여 피자 객체를 얻을 수 있습니다.
static void Main(string[] args)
{
var pizza = OrderPizza(PizzaType.Greek);
Console.WriteLine("Pizza name: " + pizza.Name);
Console.WriteLine("---------------------");
Console.WriteLine("Ingredients");
Console.WriteLine("---------------------");
Console.WriteLine(string.Join(Environment.NewLine, pizza.Ingredients));
Console.ReadKey();
}
static Pizza OrderPizza(PizzaType type)
{
IPizzaFactory factory = new PizzaFactory();
return factory.CreatePizza(type);
}
더 많은 이야기를 읽고 싶다면 내 blog를 방문하십시오.
Reference
이 문제에 관하여(팩토리 메소드 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tkarropoulos/factory-method-pattern-p53텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)