装饰模式有四个重要角色: 抽象构件角色: Water 具体构件角色 : StreamWater 抽象装饰角色: WaterDecorators 具体装饰角色: FilterApparatus 日常生活中我们用的自来水的一个加工过程: 水是一个抽想的一个对象他拥有具体水的方法,和属性,在这里我们有一个具体的水对象,StreamWater (河水),我们希望将具体的水对象加工,而不去修改这个具体的水对象中的行为和方法,在这里有一个很重要的一个角色抽象装饰角色,(抽象装饰角色有两个很重要的特征:1.她继承抽象构件角色,2.她拥有构件的引用) ,她好比加工机器 加工机器一听就是一个很抽象的名词,所以每个具体的加工机器(FilterApparatus )都要继承这个抽象机器(WaterDecorators) ,这样具体你只要将一个构件也就是(河水)放入具体的机器加工,就可以改变其行为属性.
------------------------------------------------------
class WaterDecorator
{
static void Main(string[] args) {
StreamWater sw = new StreamWater();
sw.handleWater();
FilterApparatus ap = new FilterApparatus(sw);
ap.process();
ap.handleWater();
}
}
//抽象构件
abstract class Water {
private double cleanliness;
public double Cleanliness
{
set {
cleanliness = value;
}
get {
return this.cleanliness;
}
}
public abstract void handleWater();
}
//具体构件
class StreamWater : Water{
public StreamWater() {
this.Cleanliness = 45;
}
public override void handleWater()
{
Console.WriteLine("Stream water ={0}",Cleanliness);
}
}
//抽象装饰
abstract class WaterDecorators : Water{
protected Water w;
public WaterDecorators(Water w) {
this.w = w;
}
public override void handleWater()
{
w.handleWater();
}
}
//具体装饰
class FilterApparatus : WaterDecorators {
public FilterApparatus(Water w)
: base(w)
{
}
public void process() {
w.Cleanliness += 50;
}
}