设计模式(三)策略模式

策略模式(Strategy Pattern):
定义了算法族,分别封装起来,让它们之间可相互替换,此模式让算法的变化独立于使用算法的客户。
和工厂模式最大的区别是工厂模式客户不需要关心对象创建的过程而策略模式需要用户自己去决定对象创建工程的步骤
举个例子:
我们去吃饭,工厂模式就好比,我们只需要决定我们是吃中餐还是西餐即可,而策略模式就好比,我们自己决定是吃中餐就需要做一盘川菜或者粤菜,需要吃什么菜我们就选择做什么菜即可得到一顿中餐

实际例子:
Igongfa 功法接口

public interface Igongfa {
    public void attack();
}

Gongfa_hanbing 功法寒冰掌

public class Gongfa_hanbing implements Igongfa{
    @Override
    public void attack() {
        System.out.println("使用寒冰掌攻击");
    }
}

Gongfa_jiuyang 九阳神功

public class Gongfa_jiuyang implements Igongfa{
    @Override
    public void attack() {
        System.out.println("使用九阳神功攻击");
    }
}

Istyle人物外观风格接口

public interface Istyle {
    public void style();
}

Style_man 男性风格外观

public class Style_man implements Istyle{
    @Override
    public void style() {
        System.out.println("性别:男");
    }
}

Style_women 女性风格外观

public class Style_women implements Istyle{
    @Override
    public void style() {
        System.out.println("性别:女");
    }
}

Role 角色

public class Role {

    private Igongfa gongfa;

    private Istyle style;

    public Igongfa getGongfa() {
        return gongfa;
    }
    public void setGongfa(Igongfa gongfa) {
        this.gongfa = gongfa;
    }
    public Istyle getStyle() {
        return style;
    }
    public void setStyle(Istyle style) {
        this.style = style;
    }
    public void attack(){
        this.getGongfa().attack();
    }
    public void style(){
        this.getStyle().style();
    }
}

test类

public class Test {
    public static void main(String[] args) {
        Role r  =new Role();
        r.setGongfa(new Gongfa_hanbing());
        r.setStyle(new Style_women());
        r.attack();
        r.style();
    }
}

执行结果:

使用寒冰掌攻击
性别:女

1、封装变化(把可能变化的代码封装起来)

2、多用组合,少用继承(我们使用组合的方式,为客户设置了算法)

3、针对接口编程,不针对实现(对于Role类的设计完全的针对角色,和技能的实现没有关系)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值