michaelegend 发表于 2013-1-26 14:13:31

编程模式--装饰器模式小解

/**假如我们现在有三个类A类B类C类其中 B类、C类都是A类的子类现在我们遇到一个问题,就是我要扩展B类和C类的功能,新增的三种功能分别用method1()、method2()、method3()来表示在我们遇到这个问题之前,B类和C类都各自有自己的子类,比如,那B类来讲,它的子类当中有的只新增了method1(), 有的新增了method1()和method2(), 有的三个新的功能都增加了因此B类的子类的数目应该是2^3 - 1 = 7个同样, C类也有7个子类这个一样凭空多出了好些个类, 此时我们可以用装饰器模式*//**A接口*/package com.michael.decorator;public interface A {                public abstract void eat();      }/**B类*/package com.michael.decorator;import michael.decorator.Decorator1;public class B implements A {      //现在要扩展B类的功能      public static void main(String[] args) {                B b = new B();                b.eat();                Decorator1 d1 = new Decorator1(b);                d1.method1();      }      public void eat() {                System.out.println("eat----------");      }}/**C类*/package com.michael.decorator;public class C implements A {      public void eat() {               System.out.println("C--eat()---------");                        }      public static void main(String args[]){                C c = new C();                c.eat();                Decorator2 d2 = new Decorator(c);                d2.method2();      }}/**装饰器1*/package michael.decorator;import com.michael.decorator.A;public class Decorator1 implements A {                //包含参数为A的构造方法      public Decorator1(A a){                        }      public void method1(){                System.out.println("Method1---------");      }                public void eat() {                // TODO Auto-generated method stub                        }}/**装饰器2*/package michael.decorator;import com.michael.decorator.A;public class Decorator2 implements A{                //包含参数为A的构造方法      public Decorator2(A a){                        }      public void method2(){                System.out.println("Method2---------");      }      public void eat() {                // TODO Auto-generated method stub                        }}/**装饰器3*/package michael.decorator;import com.michael.decorator.A;public class Decorator3 implements A {                //包含参数为A的构造方法      public Decorator3(A a){                        }      public void method3(){                System.out.println("Method3---------");      }      public void eat() {                // TODO Auto-generated method stub                        }}
页: [1]
查看完整版本: 编程模式--装饰器模式小解