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'
本文通过一个实例展示了如何运用装饰器模式来包装对象,增加额外的行为。代码示例中,`Chinese` 类实现了 `Person` 接口,表示普通中国人点餐。而 `SiChuanChineseDecorator` 是装饰器类,用于包装 `Chinese` 对象,添加了四川人点餐的特定行为。运行结果展示了装饰器模式在实际应用中的效果。
1340

被折叠的 条评论
为什么被折叠?



