主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
场景:玩DNF时,我有个武器,晶体契约中我可以放置红色小晶体和白色小晶体给武器附魔。
解决:使用不同的晶体让武器攻击出不同的效果。
晶体都可以攻击,建接口
public interface Crystal {
void attack();
}
不同晶体有自己的具体实现
public class Red implements Crystal {
@Override
public void attack() {
System.out.println("火属性攻击");
}
}
public class White implements Crystal {
@Override
public void attack() {
System.out.println("光属性攻击");
}
}
当我们选择不同的晶体时,相当于把晶体属性注入武器
public class Weapon {
private Crystal crystal;
public Weapon(Crystal crystal){
this.crystal = crystal;
}
public void use(){
crystal.attack();
}
}
这样,我们在使用武器的时候,就可以根据注入不同晶体打出对应属性的攻击
public static void main(String[] args) {
Weapon weapon = new Weapon(new Red());
weapon.use(); // 火属性攻击
}