(07)装饰模式
概念
装饰模式使用在不改变对象原有的功能基础上,对原有的功能进行增强。
例如:一个机器人只会扫地,我希望机器人在扫地的同时,它还能够唱歌。这种场景就很适合装饰模式,在不改变原有的功能基础上,对原有的功能增强
前提:装饰类与被装饰类都实现相同的接口。装饰类中有一个构造方法,构造方法中需要传入被装饰类。这样装饰类就可以使用被装饰类的功能,也可以对被装饰类的功能增强
实现方式
/**
* 装饰器
*/
public class Demo {
public static void main(String[] args) {
Robot robotImpl = new RobotImpl();
RobotDecorator robotDecorator = new RobotDecorator(robotImpl);
robotDecorator.sweepSuper();
}
}
// 机器人共同的接口
interface Robot {
public void sweep();
}
// 具体的机器人(被装饰类)
class RobotImpl implements Robot {
public void sweep() {
System.out.println("我会扫地");
}
}
// 装饰类,需要和被装饰类实现共同接口,需要具有被装饰类的所有功能
class RobotDecorator implements Robot {
Robot robot;
public RobotDecorator(Robot robot) {
this.robot = robot;
}
public void sweep() {
robot.sweep();
}
public void sweepSuper() {
sweep();
System.out.println("我不仅会扫地,我还会唱歌");
}
}
我会扫地
我不仅会扫地,我还会唱歌