ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## **模式的定义** 装饰器模式,也成为包装模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。 ## **代码实现** 需求:在普通人类的基础上,增加超人的能力。 1. 定义一个Human接口 ``` public interface Human { // 跑步 void run(); } ``` 2. 实现Man ``` public class Man implements Human { @Override public void run() { System.out.println("人会跑步"); } } ``` 3. 创建Man装饰器对他进行装饰,添加可以飞翔的超能力 ``` public class ManDecorator implements Human { private Human human; public ManDecorator(Human human) { this.human = human; } private void fly() { System.out.println("可以飞.."); } @Override public void run() { human.run(); fly(); } } ``` 4. 创建SuperMan装饰器对他再进行装饰,添加可以定速巡航的超能力 ``` public class SuperManDecorator implements Human { private Human human; public SuperManDecorator(Human human) { this.human = human; } private void other() { System.out.println("可以定速巡航"); } @Override public void run() { human.run(); other(); } } ``` 5. 客户端调用 ``` public static void main(String[] args) { Human superMan = new ManDecorator(new Man()); superMan.run(); Human ssuperMan = new SuperManDecorator(superMan); ssuperMan.run(); } ``` 步骤3、4的代码几乎是一致的,那我们可以继续抽象代码 1. 定义装饰的抽象类 ``` public abstract class AbstractDecorator implements Human { private Human human; public AbstractDecorator(Human human) { this.human = human; } @Override public void run() { human.run(); } } ``` 2. 修改Man装饰器代码 ``` public class ManDecorator extends AbstractDecorator { public ManDecorator(Human human) { super(human); } private void fly() { System.out.println("可以飞.."); } @Override public void run() { super.run(); fly(); } } ```