89 lines
1.6 KiB
D
89 lines
1.6 KiB
D
|
module abstractfactory.pizza;
|
||
|
|
||
|
import abstractfactory.dough;
|
||
|
import abstractfactory.sauce;
|
||
|
import abstractfactory.veggies;
|
||
|
import abstractfactory.cheese;
|
||
|
import abstractfactory.pepperoni;
|
||
|
import abstractfactory.clams;
|
||
|
import std.stdio : writeln;
|
||
|
import std.conv : to;
|
||
|
|
||
|
abstract class Pizza
|
||
|
{
|
||
|
protected:
|
||
|
string name;
|
||
|
Dough dough;
|
||
|
Sauce sauce;
|
||
|
Veggies[] veggies;
|
||
|
Cheese cheese;
|
||
|
Pepperoni pepperoni;
|
||
|
Clams clams;
|
||
|
public:
|
||
|
void prepare();
|
||
|
|
||
|
void bake()
|
||
|
{
|
||
|
writeln("Bake for 25 minutes at 350");
|
||
|
}
|
||
|
|
||
|
void cut()
|
||
|
{
|
||
|
writeln("Cut the pizza into diagonal slices");
|
||
|
}
|
||
|
|
||
|
void box()
|
||
|
{
|
||
|
writeln("Place pizza in official PizzaStore box");
|
||
|
}
|
||
|
|
||
|
void setName(string name)
|
||
|
{
|
||
|
this.name = name;
|
||
|
}
|
||
|
|
||
|
string getName()
|
||
|
{
|
||
|
return name;
|
||
|
}
|
||
|
|
||
|
override string toString() const
|
||
|
{
|
||
|
string s;
|
||
|
s ~= "---- " ~ name ~ " ----\n";
|
||
|
if (dough !is null)
|
||
|
{
|
||
|
s ~= dough ~ "\n";
|
||
|
}
|
||
|
if (sauce !is null)
|
||
|
{
|
||
|
s ~= sauce ~ "\n";
|
||
|
}
|
||
|
if (cheese !is null)
|
||
|
{
|
||
|
s ~= cheese ~ "\n";
|
||
|
}
|
||
|
if (veggies.length)
|
||
|
{
|
||
|
foreach (key, val; veggies)
|
||
|
{
|
||
|
s ~= val.to!string;
|
||
|
if (key + 1 < veggies.length)
|
||
|
{
|
||
|
s ~= ", ";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (clams !is null)
|
||
|
{
|
||
|
s ~= clams ~ "\n";
|
||
|
}
|
||
|
if (pepperoni !is null)
|
||
|
{
|
||
|
s ~= pepperoni ~ "\n";
|
||
|
}
|
||
|
|
||
|
return s;
|
||
|
}
|
||
|
}
|