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


/**假如我们现在有三个类
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

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值