...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

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); }

バニラアイス
チョコバニラアイス
チョコ抹茶アイス