装饰者模式
装饰者模式又名包装(Wrapper)模式。装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
装饰者模式动态地将责任附加到对象身上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
(1)抽象组件:定义一个抽象接口,来规范准备附加功能的类
(2)具体组件:将要被附加功能的类,实现抽象构件角色接口
(3)抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口
(4)具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。
//机器人都会工作
public interface Robot{
public void work();
}
//机器人clear会工作
public class ClearRobot implements Robot{
@override
public void work(){
//代码
system.out.printfln("robot work");
}
}
//机器人技能
public class Skill implements Robot{
private Robot rob;
public Skill(Robot rob){
this.rob = rob;
}
@override
public void work(){
//代码
rob.work();
}
}
//机器人会说话
public class Talk extends Skill{
public Talk(Robot rob){
super(rob);
}
@override
public void work(){
//代码
system.out.printfln("Robot talk");
}
}
//机器人会唱歌
public class Sing extends Skill(){
public Sing (Robot rob){
super(rob);
}
@override
public void work(){
//代码
system.out.printfln("Robot Sing")
}
}
//客户端调用
public class ClearBoy{
public static void main(String[] args){
Robot rob = new ClearRobot();
//1.单层装饰
Robot talk = new Talk(rob);
//可传递
Robot sing = new Sing(talk);
//2.双层装饰
Robot sing2 = new Sing(new talk(rob));
sing.work();
sing2.work();
}
}