被装饰者 Component.java
public abstract class Component {
// 创建被装饰类
// 抽象的方法
public abstract void operate();
}
具体实现者(核心实现功能)ConcreteComponent.java
public class ConcreteComponent extends Component {
// 具体实现
@Override
public void operate() {
System.out.println("do Something");
}
}
装饰类Decorator.java
public class Decorator extends Component {
private Component component = null;
// 通过构造参数传递被装饰者
public Decorator(Component _component) {
// TODO Auto-generated constructor stub
this.component = _component;
}
// 委托被装饰者执行行
@Override
public void operate() {
// TODO Auto-generated method stub
this.component.operate();
}
}
功能扩展一:ConcreteDecorator1.java
public class ConcreteDecorator1 extends Decorator {
// 定义被装饰者
public ConcreteDecorator1(Component _component) {
super(_component);
}
// 定义自己的修饰方法
public void method1(){
System.out.println("method1 修饰");
}
// 重写父类的operate方法
@Override
public void operate() {
// TODO Auto-generated method stub
this.method1();
super.operate();
}
}
功能扩展二:ConcreteDecorator2.java
public class ConcreteDecorator2 extends Decorator{
// 定义被装饰者
public ConcreteDecorator2(Component _component) {
super(_component);
}
// 定义自己的修饰方法
public void method2() {
System.out.println("method2 修饰");
}
// 重写父类的operate方法
@Override
public void operate() {
// TODO Auto-generated method stub
this.method2();
super.operate();
}
}
main方法以:Client.java
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Component component = new ConcreteComponent();
component = new ConcreteDecorator1(component);
component = new ConcreteDecorator2(component);
component.operate();
}
}
运行结果:
method2 修饰
method1 修饰
do Something
描述:继承是静态扩展,而装饰模式是动态扩展,降低父子类的耦合,便于功能扩展,便于维护.
注意:避免多层装饰.
|