设计模式之策略模式

策略模式主要是用来单个属性多个主体重复使用。典型例子就是游戏的角色。

每个游戏角色都有三种技能,逃跑 攻击 防御

public interface GongJiSkil {
    String gongji();
}
public interface FangYuSkill {
    String fangyu();
}
public interface RunSkill {
    String run();
}
public class JinZhongZhao implements FangYuSkill {
    @Override
    public String fangyu() {
        System.out.println("金钟罩");
        return "金钟罩";
    }
}
public class LingBoWeiBu implements RunSkill {
    @Override
    public String run() {
        System.out.println("凌波微步");
        return "凌波微步";
    }
}
public class LiuMaiShenJian implements GongJiSkil {
    @Override
    public String gongji() {
        System.out.println("六脉神剑");
        return "六脉神剑";
    }
}
public class ShenChuGuimo implements RunSkill {
    @Override
    public String run() {
        System.out.println("神出鬼没");
        return "神出鬼没";
    }
}
public class TieBuShan implements FangYuSkill {
    @Override
    public String fangyu() {
        System.out.println("铁布衫");
        return "铁布衫";
    }
}
public class XiangLongShiBaZhang implements GongJiSkil {
    @Override
    public String gongji() {
        System.out.println("降龙十八掌");
        return "降龙十八掌";
    }
}
public abstract class Role {
    private GongJiSkil gongJiSkil;
    private FangYuSkill fangYuSkill;
    private RunSkill runSkill;

    public Role setFangYuSkill(FangYuSkill fangYuSkill) {
        this.fangYuSkill = fangYuSkill;
        return this;
    }

    public Role setGongJiSkil(GongJiSkil gongJiSkil) {
        this.gongJiSkil = gongJiSkil;
        return this;
    }

    public Role setRunSkill(RunSkill runSkill) {
        this.runSkill = runSkill;
        return this;
    }

    public String getFangYuSkill() {
        return fangYuSkill.fangyu();
    }

    public String getGongJiSkil() {
        return gongJiSkil.gongji();
    }

    public String getRunSkill() {
        return runSkill.run();
    }
}
public class SystemRole extends Role{
    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    SystemRole(){}
    SystemRole(String name){
        this.name = name;
    }
}
public class Test {
    public static void main(String[] args) {
        Role role1 = new SystemRole("乔峰")
                .setFangYuSkill(new JinZhongZhao())
                .setGongJiSkil(new XiangLongShiBaZhang())
                .setRunSkill(new LingBoWeiBu());
        Role role2 = new SystemRole("虚竹")
                .setGongJiSkil(new LiuMaiShenJian())
                .setRunSkill(new ShenChuGuimo())
                .setFangYuSkill(new TieBuShan());

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值