概念:在不改变原有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)
1.定义一个公共接口
public interface Decorator {
public void study() ;
public void eat() ;
}
2.用实现类实现该接口
public class Decorator1 implements Decorator {
@Override
public void study() {
System.out.println("我爱学习");
}
@Override
public void eat() {
System.out.println("我爱吃饭");
}
}
3.测试
@SpringBootTest
class Demo01ApplicationTests {
@Test
void test01() {
Decorator decorator = new Decorator1();
decorator.eat();
decorator.study();
}
}
执行结果如下
我爱吃饭
我爱学习
4.开始进行装饰
① 定义一个实现类,实现和被装饰类相同的接口
②在类中声明一个原有对象的成员变量
③利用有参构造方法,将被装饰者对象传入并赋值
④重写方法,对原有方法中满意的部分继续调用,修改不满意的部分。
public class Decorator2 implements Decorator {
private Decorator decorator;
public Decorator2(Decorator decorator) {
this.decorator = decorator;
}
@Override
public void eat() {
decorator.eat();
}
@Override
public void study() {
System.out.println("我爱学习");
System.out.println("我要开始装饰了");
System.out.println("我爱游泳");
}
}
5.进行测试
@SpringBootTest
class Demo01ApplicationTests {
@Test
void test01() {
Decorator decorator1 = new Decorator1();
decorator1.eat();
decorator1.study();
System.out.println("=============================");
Decorator decorator2 = new Decorator2(decorator1);
decorator2.eat();
decorator2.study();
}
}
执行结果如下
我爱吃饭
我爱学习
=============================
我爱吃饭
我爱学习
我要开始装饰了
我爱游泳