装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。属于结构型模式。
举个栗子
小明打排位赛正在选英雄,上单锐雯,这一把用哪个皮肤呢?
public interface Skin {
void show();
}
用兔女郎的吧。
public class BunnyGirl implements Skin {
@Override
public void show() {
System.out.println("兔女郎");
}
}
诶,兔女郎出了炫彩皮肤,可以用不同的颜色装饰一下。
public abstract class Decorator implements Skin {
private Skin skin;
public Decorator(Skin skin) {
this.skin = skin;
}
public abstract void colorful();
}
有黑丝的。
public class BlackDecorator extends Decorator {
public BlackDecorator(Skin skin) {
super(skin);
}
@Override
public void colorful() {
System.out.print("黑丝");
}
@Override
public void show() {
colorful();
super.show();
}
}
有白丝的。
public class WhiteDecorator extends Decorator {
public WhiteDecorator(Skin skin) {
super(skin);
}
@Override
public void colorful() {
System.out.print("白丝");
}
@Override
public void show() {
colorful();
super.show();
}
}
游戏开始。
public class Test {
public static void main(String[] args) {
Skin bunnyGirl = new BunnyGirl();
Decorator blackBunnyGirl = new BlackDecorator(bunnyGirl);
blackBunnyGirl.show();
}
}
断剑重铸之日,骑士归来之时!小明选了黑丝兔女郎皮肤,希望能拿个5杀吧。