patterns/abstractfactory/pizza.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;
}
}