装饰设计模式
应用场景:
就是用来对某个对象(类)的功能进行装饰(增强的).
固定思路:
- 定义装饰类, 在装饰类中定义成员变量, 记录被装饰的对象的类型.
- 在构造方法中传入, 具体的要被装饰的对象.
- 对 被装饰对象的功能进行升级.
1 定义接口
interface Coder{ //程序员
void code();
}
2 被装饰的类
class Student implements Coder{
public void code() {
System.out.println("Hello World!");
System.out.println("变量, 常量");
System.out.println("数组, 方法...");
}
public void smoke(){}
}
3 装饰类
class HeimaStudent implements Coder {
//1. 定义装饰类, 在装饰类中定义成员变量, 记录被装饰的对象的类型.
private Student s;
//2. 在构造方法中传入, 具体的要被装饰的对象.
public HeimaStudent(Student s) {
this.s = s;
}
//对 被装饰对象的功能进行升级.
@Override
public void code() {
s.code();
System.out.println("来黑马以后, 学会了: JavaSE, JavaWeb");
System.out.println("来黑马以后, 学会了: Hadoop生态圈, Zookeeper");
System.out.println("来黑马以后, 学会了: 千亿级数据仓, 360°全方位用户画像");
}
}
4 测试
public class Demo01 {
public static void main(String[] args) throws FileNotFoundException {
//测试学生类中的方法
Student xiaoLi = new Student();
xiaoLi.code();
System.out.println("--------------------------");
//小张: 没来黑马以前.
Student xz = new Student();
xz.code();
System.out.println("--------------------------");
//小张: 来黑马以后.
//HeimaStudent hs = new HeimaStudent(某一个学生对象);
HeimaStudent hs = new HeimaStudent(xz);
hs.code();
//hs.smoke();
}
}