定义:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。
代码:
接口(面对接口编程,以便动态绑定)
public interface Women {
// 颜值
void faceScore();
// 气质
void qualities();
}
原始类
/**
* 定义原始对象
* @author z_hh
* @time 2018年7月22日
*/
public class Fengjie implements Women {
@Override
public void faceScore() {
System.out.println("凤姐原来的颜值是0分!");
}
@Override
public void qualities() {
System.out.println("凤姐原来的气质是0分!");
}
}
装饰者抽象类(作用:1、抽取共同的属性,在这里是Women引用;2、提供默认修饰,避免所有子装饰类必须实现接口,例如,这里的画眉毛装饰器,我只需要装饰颜值方法,只重写faceScore方法就可以了)
/**
* 装饰抽象类
* 作用:
* 1、抽取共同属性
* 2、提供默认修饰,避免每个子装饰类必须重写所有接口方法
* @author z_hh
* @time 2018年7月22日
*/
public abstract class MakeUpWomen implements Women {
private Women women;
public MakeUpWomen(Women women) {
this.women = women;
}
@Override
public void faceScore() {
women.faceScore();
}
@Override
public void qualities() {
women.qualities();
}
}
装饰者1(画眉毛,只重写faceScore方法)
/**
* 画了眉毛
* @author z_hh
* @time 2018年7月22日
*/
public class PencilTheEyebrowsWomen extends MakeUpWomen {
public PencilTheEyebrowsWomen(Women women) {
super(women);
}
// 只装饰颜值方法
@Override
public void faceScore() {
super.faceScore();
System.out.println("因为画了眉毛,颜值提高50分!");
}
}
装饰者2(涂唇膏,只重写qualities方法)
/**
* 涂了唇膏
* @author z_hh
* @time 2018年7月22日
*/
public class LipstickWomen extends MakeUpWomen {
public LipstickWomen(Women women) {
super(women);
}
// 只装饰气质方法
@Override
public void qualities() {
super.qualities();
System.out.println("因为涂了唇膏,气质提高50分!");
}
}
测试:
public class Test {
public static void main(String[] args) {
System.out.println("※※※原始的凤姐");
Women fengjie = new Fengjie();
fengjie.faceScore();
fengjie.qualities();
System.out.println("--------------完美分割线--------------");
System.out.println("※※※画了眉毛的凤姐");
Women huameimao = new PencilTheEyebrowsWomen(fengjie);
huameimao.faceScore();
huameimao.qualities();
System.out.println("--------------完美分割线--------------");
System.out.println("※※※涂了唇膏的凤姐");
Women tuchungao = new LipstickWomen(fengjie);
tuchungao.faceScore();
tuchungao.qualities();
}
}
结果:
※※※原始的凤姐
凤姐原来的颜值是0分!
凤姐原来的气质是0分!
--------------完美分割线--------------
※※※画了眉毛的凤姐
凤姐原来的颜值是0分!
因为画了眉毛,颜值提高50分!
凤姐原来的气质是0分!
--------------完美分割线--------------
※※※涂了唇膏的凤姐
凤姐原来的颜值是0分!
凤姐原来的气质是0分!
因为涂了唇膏,气质提高50分!
注意:JDK中典型的装饰者设计模式------>IO流。