/**假如我们现在有三个类
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
}
}
编程模式--装饰器模式小解
最新推荐文章于 2024-09-23 16:51:40 发布