1. 原理
新建对象,将要包装的对象作为成员变量注入,并在要包装的方法前后添加包装处理
2. 代码
Person
/**
* @author: pp_lan
* @date: 2022/3/19
*/
public interface Person {
void speak();
}
Chinese
/**
* @author: pp_lan
* @date: 2022/3/19
*/
public class Chinese implements Person {
@Override
public void speak() {
System.out.println("中国人点餐");
}
}
SiChuanChineseDecretor
/**
* @author: pp_lan
* @date: 2022/3/19
*/
public class SiChuanChineseDecorator {
private Person person;
public SiChuanChineseDecorator(Person person) {
this.person = person;
}
public void order() {
System.out.println("============= 四川人开始点餐(四川话) =============");
this.person.speak();
System.out.println("============= 四川人点餐结束 =============");
}
}
DecratorTest
/**
* @author: pp_lan
* @date: 2022/3/19
*/
public class DecoratorTest {
public static void main(String[] args) {
new Chinese().speak();
System.out.println("------------ 奇怪的分割线(包装后) ----------");
SiChuanChineseDecorator decorator = new SiChuanChineseDecorator(new Chinese());
decorator.order();
}
}
执行结果
Connected to the target VM, address: '127.0.0.1:53060', transport: 'socket'
中国人点餐
------------ 奇怪的分割线(包装后) ----------
============= 四川人开始点餐(四川话) =============
中国人点餐
============= 四川人点餐结束 =============
Disconnected from the target VM, address: '127.0.0.1:53060', transport: 'socket'