PizzaShopDesignPattern
Idea: At arbejde med følgende desing pattern: Decorator, Factory, Observer og Adapter..
Background: Larman kap. 26 og note
I denne opgave skal der implementeres en PizzaShop vha Decorator design pattern.
Der skal laves et simpelt Consol project, hvor følgende klasser implementeres:
Test i main.
Udvid PizzaShoppen så der implementeres et Factory Design Pattern til at skabe Pizza objekter. MakePizza( ) kan tage et array af string som argument (en liste af ingredientser der skal tilføjes pizzaen (hvis man ikke ønsker en Margarita :) fx Bacon, Ham, Pepperoni ...). MakePizza( ) kan i en foreach-løkke kalde en privat hjælpemetode AddIngredients( ), der kan indeholde en switch-sætning til at afgøre hvilke "dekorationer" Margaritaen skal have.
Test i main
Udvid PizzaShoppen med Observer Design Pattern, fx ved at tilføje en PizzaMan og en PizzaOven ala følgende:
TakeOrder skal kalde MakePizza( ) på PizzaFactory og PreparePizza( )på PizzaOven.
PreparePizza kan have følgende udseende:
public void preparePizza(AbstractPizza p)
{
Task.Factory.StartNew(() =>
{
int preparetime = random.Next(5, 15);
System.Threading.Thread.Sleep(preparetime*1000);
NotifyObservers(p);
});
}
og NotifyObservers følgende udseeende:
private void NotifyObservers(AbstractPizza pizza)
{
foreach (var observer in _observers)
{
observer.Notify(pizza);
}
}
Test i main
Udvid PizzaShoppen med Adapter Design Pattern så der kan indføres en Pizza Menu med drik (fx øl el. vand) ala følgende:
Udvid PizzaShoppen med Strategy Design Pattern, det kunne fx. være med forskellige priser for Frokost (-20%) og Nat (+10%), men der kunne være mange regler, alle implementeret i forskellige implementeringer af IPriceStrategy.
I første omgang er Client vores PizzaMan der benytter Strategy pattern når han skal finde prisen evt. med noget logik ala:
public enum TimeOfDay { Lunch, Evening, Night };
....
switch (DayTime)
{
case TimeOfDay.Evening: price = EveningPriceStrategy.CalculatePrice(pizza); break;
case TimeOfDay.Lunch: price = LunchPriceStrategy.CalculatePrice(pizza); break;
case TimeOfDay.Night: price = NightPriceStrategy.CalculatePrice(pizza); break;
}
Test test test ... og meget gerne også en unittest :)
Har I tid til overs lav en APP med lister så der kan vælges Pizzaer, Ingredienser, Menuer m. Drikke mm
God fornøjelse
Henrik