黑马程序员技术交流社区
标题:
java装饰类
[打印本页]
作者:
〃Mr.Zぐ
时间:
2013-5-31 18:54
标题:
java装饰类
package decorator;
public class Demo {
public static void main(String[] args)
{
Component component = new ConcreteComponent();
component.operation();
System.out.println("----------------------------------------");
component = new BeforeDecorator(new ConcreteComponent());
component.operation();
}
}
——————————————————————————————————
/**
* 业务接口
*/
public interface Component {
void operation();
}
——————————————————————————————
/**
* 具体业务类.
*/
public class ConcreteComponent implements Component {
public void operation() {
System.out.println("I'm "+this.getClass().getName());
}
}
——————————————————————————————————————
/**
* 在业务执行前加点额外的操作.
*/
public class BeforeDecorator extends Decorator {
public BeforeDecorator(Component component) {
super(component);
}
public void operation() {
before();
super.operation();
}
private void before() {
System.out.println("before: I'm "+this.getClass().getName());
}
}
以上代码补全
/**
* 装饰类.
*/
public class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation();
}
}
BeforeDecorator 类的 super.operation();
为什么会输出I'm decorator.ConcreteComponent
作者:
xiatian
时间:
2013-6-1 17:35
在装饰类中,
public Decorator(Component component) {
this.component = component;
}
接收的是Component component创建的对象,也就是main方法里面的 、
Component component = new ConcreteComponent();
也就是接收的是ConcreteComponent对象
然后用 this.component,把ConcreteComponent给了 private Component component;中的component
当运行到这个方法的时候
public void operation() {
component.operation();
}
相当于ConcreteComponent().operation(),也就是它自己调用了自己的operation()方法
所以输出的是类名和ConcreteComponent
I'm decorator.ConcreteComponent
看懂了吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2