Decorator pattern
インスタンスを包含して機能を拡張するパターン.
import std.stdio; interface Ice { string name(); } class VanillaIce : Ice { override string name() { return "バニラアイス"; } } class ChocorateSomeIce : Ice { Ice ice; this(Ice ice) { this.ice = ice; } override string name() { return "チョコ" ~ ice.name(); } } class GreenTeaIce : Ice { override string name() { return "抹茶アイス"; } } void main() { Ice v = new VanillaIce(); Ice cv = new ChocorateSomeIce(new VanillaIce()); Ice cg = new ChocorateSomeIce(new GreenTeaIce()); writeName(v); writeName(cv); writeName(cg); } void writeName(Ice ice) { writeln(ice.name); } バニラアイス チョコバニラアイス チョコ抹茶アイス