装饰者模式
动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则。
动态的给一个对象添加一些额外的功能,就增加功能来说,装饰模式比生成子类更为灵活。
实现
// 声明一个机器人接口,定义一个方法
interface Robot{
void doSomething();
}
// 被装饰的类
class FirstRobot implements Robot{
@Override
// 第一代机器人
public void doSomething() {
System.out.println("第一代机器人会唱歌");
System.out.println("第一代机器人会对话");
}
}
class RobotDecorator implements Robot{
private Robot robot;
// 使用构造方法传一个机器人对象就行了
public RobotDecorator(Robot robot) {
this.robot = robot;
}
@Override
public void doSomething() {
robot.doSomething();
}
/**
* 这个方法就是可以做第一代机器人做的事
* 同时还有新添加的功能
*/
public void doMoreThing(){
robot.doSomething();
System.out.println("第二代机器人还会跳舞");
}
}
public static void main(String[] args) {
// new 一个装饰器类,传入需要装饰的对象就行了
new RobotDecorator(new FirstRobot()).doMoreThing();
}