Ch4PizzaStore: first version
This commit is contained in:
11
Ch4PizzaStore/Ch4PizzaStore.csproj
Normal file
11
Ch4PizzaStore/Ch4PizzaStore.csproj
Normal file
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<LangVersion>latestmajor</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
70
Ch4PizzaStore/Pizza.cs
Normal file
70
Ch4PizzaStore/Pizza.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
namespace Ch4PizzaStore;
|
||||
|
||||
public abstract class Pizza(string name, string dough, string sauce, List<string> toppings) {
|
||||
public string Name { get; } = name;
|
||||
|
||||
internal void Prepare() {
|
||||
Console.WriteLine($"Preparing {Name}");
|
||||
Console.WriteLine($"Tossing {dough} dough...");
|
||||
Console.WriteLine($"Adding {sauce} sauce...");
|
||||
Console.WriteLine("Adding toppings:");
|
||||
foreach (var topping in toppings) {
|
||||
Console.WriteLine($"\t{topping}");
|
||||
}
|
||||
}
|
||||
|
||||
// While in Java all methods are by default `virtual`, C# is the same as C++,
|
||||
// all methods are final/selaed until explicitly marked as virtual.
|
||||
internal virtual void Bake() {
|
||||
Console.WriteLine("Bake for 25 minutes at 350");
|
||||
}
|
||||
|
||||
internal virtual void Cut() {
|
||||
Console.WriteLine("Cutting the pizza into diagonal slices");
|
||||
}
|
||||
|
||||
internal virtual void Box() {
|
||||
Console.WriteLine("Place pizza in official PizzaStore box");
|
||||
}
|
||||
}
|
||||
|
||||
public class NYStyleCheesePizza() : Pizza("NY Style Sauce and Cheese Pizza", "Thin Crust Dough", "Marinara Sauce",
|
||||
["Grated Reggiano Cheese"]);
|
||||
|
||||
public class ChicagoStyleCheesePizza() : Pizza("Chicago Style Deep Dish Cheese Pizza", "Extra Thick Crust Dough",
|
||||
"Plum Tomato Sauce", ["Shredded Mozzarella Cheese"]) {
|
||||
internal override void Cut() {
|
||||
Console.WriteLine("Cutting the pizza into square slices");
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class PizzaStore {
|
||||
protected abstract Pizza CreatePizza(string type);
|
||||
|
||||
public Pizza OrderPizza(string type) {
|
||||
var pizza = CreatePizza(type);
|
||||
pizza.Prepare();
|
||||
pizza.Bake();
|
||||
pizza.Cut();
|
||||
pizza.Box();
|
||||
return pizza;
|
||||
}
|
||||
}
|
||||
|
||||
public class NYPizzaStore : PizzaStore {
|
||||
protected override Pizza CreatePizza(string type) {
|
||||
return type switch {
|
||||
"cheese" => new NYStyleCheesePizza(),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class ChicagoPizzaStore : PizzaStore {
|
||||
protected override Pizza CreatePizza(string type) {
|
||||
return type switch {
|
||||
"cheese" => new ChicagoStyleCheesePizza(),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
|
||||
};
|
||||
}
|
||||
}
|
||||
11
Ch4PizzaStore/Program.cs
Normal file
11
Ch4PizzaStore/Program.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
using Ch4PizzaStore;
|
||||
|
||||
PizzaStore nyStore = new NYPizzaStore();
|
||||
PizzaStore chicagoStore = new ChicagoPizzaStore();
|
||||
|
||||
var pizza = nyStore.OrderPizza("cheese");
|
||||
Console.WriteLine($"Ethan ordered a {pizza.Name}\n");
|
||||
pizza = chicagoStore.OrderPizza("cheese");
|
||||
Console.WriteLine($"Joel ordered a {pizza.Name}\n");
|
||||
@@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ch2Weather", "Ch2Weather\Ch
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ch3Beverage", "Ch3Beverage\Ch3Beverage.csproj", "{8F380143-DDBC-4785-B4F2-7B32EBE54515}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ch4PizzaStore", "Ch4PizzaStore\Ch4PizzaStore.csproj", "{EECD03A1-DE37-4E1B-8487-0A6DE21FBDB3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -24,5 +26,9 @@ Global
|
||||
{8F380143-DDBC-4785-B4F2-7B32EBE54515}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8F380143-DDBC-4785-B4F2-7B32EBE54515}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8F380143-DDBC-4785-B4F2-7B32EBE54515}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EECD03A1-DE37-4E1B-8487-0A6DE21FBDB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EECD03A1-DE37-4E1B-8487-0A6DE21FBDB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EECD03A1-DE37-4E1B-8487-0A6DE21FBDB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EECD03A1-DE37-4E1B-8487-0A6DE21FBDB3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
2
HeadFirstDesignPatterns.sln.DotSettings
Normal file
2
HeadFirstDesignPatterns.sln.DotSettings
Normal file
@@ -0,0 +1,2 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NY/@EntryIndexedValue">NY</s:String></wpf:ResourceDictionary>
|
||||
Reference in New Issue
Block a user