河水加工成加工成自来水(用装饰模式实现)

来源:互联网 发布:函数响应式编程 编辑:程序博客网 时间:2024/04/30 06:02

装饰模式有四个重要角色:   抽象构件角色:  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;
         }
     }