定义 Decorator(装饰者)
侧重于为一个基础对象动态地增强它的职责或能力。
这是面对排列组合所造成的子类数爆炸问题的一种灵活的解决方案。
大家好,我是uzi,擅长被4保一,今天我玩的是瘟疫之源。
主要靠平a输出。为了面向对象思想及方便管理攻击力及特效,我把它拉出一个接口。
public interface NormalAttack{
void makeADAttack();
}
没有装备,buff的平a属实是刮痧,但是这些加成对于原平a也只是叠加上去的加成,一层套一层,一层套一层。这就很适合装饰者模式,就像平a,加上了减速效果,又加上了灼烧效果,又加上了中毒效果,互不影响。把这些buff的加成统一管理,新建一个抽象类。但由于这些buff加成只能影响平a,所以仍然需要继承平a的接口。
public abstract class NormalAttackDecorator implements NormalAttack{
NormalAttack normalAttack;
protected NormalAttackDecorator(NormalAttack normalAttack){
this.normalAttack = normalAttack;
}
public abstract void makeADAttack();
}
然后就是具体实现啦。
public class RatNormalAttack implements NormalAttack {
private int adAttack;
RatNormalAttack (int adAttack){
this.adAttack = adAttack;
}
public void makeADAttack(){
System.out.println("初始攻击力为 "+this.adAttack);
};
}
这是没有一点buff,基础到甚至没有被动的平a,也带不了中毒效果。那就加上去。
class PoisonNormalAttackDecorator extends NormalAttackDecorator{
String slowSpecialEfficacy = "中毒";
protected PoisonNormalAttackDecorator(NormalAttack normalAttack) {
super(normalAttack);
}
@Override
public void makeADAttack() {
this.normalAttack.makeADAttack();
System.out.println("增加了"+slowSpecialEfficacy+"buff");
}
}
调用办法很简单。在main函数里套娃就可以了。
class Main{
public static void main(String[] args) {
NormalAttack ratNormalAttack = new PoisonNormalAttackDecorator(new RatNormalAttack(120));
ratNormalAttack.makeADAttack();
}
}
结果:
接下来就很简单了,可以随意增加,添加buff。
我打完了大龙,又增加了攻击力。
class DragonDecorator extends NormalAttackDecorator{
NormalAttack normalAttack;
int addNormalAttack = 40;
String addNormalAttackType = "男爵";
protected DragonDecorator(NormalAttack normalAttack) {
super(normalAttack);
this.normalAttack = normalAttack;
}
public void makeADAttack(){
this.normalAttack.makeADAttack();
System.out.println("增加了"+addNormalAttackType+"buff,攻击力提升了"+addNormalAttack);
}
}
main也相应改成
class Main{
public static void main(String[] args) {
NormalAttack ratNormalAttack = new DragonDecorator(new PoisonNormalAttackDecorator(new RatNormalAttack(120)));
ratNormalAttack.makeADAttack();
}
}
又加上了减速buff(代码就略了,和上面差不多)
装饰者模式主要的好处就是,可以自由组合,只需要把外面的套娃设计成你获得的buff即可。