装饰模式,可以动态给对象增加一些额外的职责,比子类更加灵活,通常使用继承来实现扩展性,继承的子类越来越多,会增加复杂性,装饰模式的特点是:装饰者与被装饰者拥有共同的超类,继承的目的是继承类型。
以下用一个案例来实现装饰模式:
// 定义装饰接口
public interface IDecoration {
// 定义显示show装饰的方法
public void show();
}
// 定义装饰者
public abstract class Decoration implements IDecoration {
private IDecoration iDecoration;
public Decoration(IDecoration iDecoration) {
this.iDecoration = iDecoration;
}
public void show() {
iDecoration.show();
}
}
// 定义第一个被装饰者,装饰者会很多很多
public class DecorationA extends Decoration{
public DecorationA(IDecoration iDecoration) {
super(iDecoration);
// TODO Auto-generated constructor stub
}
public void show() {
super.show();
System.out.println("DecorationA show()...");
}
}
// 定义第二个被装饰者
public class DecorationB extends Decoration{
public DecorationB(IDecoration iDecoration) {
super(iDecoration);
// TODO Auto-generated constructor stub
}
public void show() {
super.show();
System.out.println("DecorationB show()...");
}
}
// 定义一个人,直接实现 被装饰者的 共同超类
public class Person implements IDecoration{
public void show() {
System.out.println("Person show()...");
}
}
// 客户端程序
public class Main {
public static void main(String [] args) {
// 会发现这里的写法,和IO有很相似
Decoration decoration = new DecorationA(
new DecorationB(
new Person()
));
decoration.show();
}
}
运行结果:
装饰模式的好处:有装饰者与被装饰者有共同的超类
谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006