设计模式 策略模式的适用场景和使用方法

策略模式也称为政策模式

属于对象的行为模式

适用场景:当一件任务可以使用不同的方式来完成,就可以使用策略模式。

使用方法:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换

比如你去商场买东西,商场正在搞活动,有的商品可以打折购买,有的商品参加满减,还有的商品抽奖后直接免单。这种情况就可以使用策略模式。

去买东西计算你最后应支付的金额就是一个任务,计算实付金额有三种方式:打折扣、满多少减多少、直接免单不用付钱。

再比如,你要去旅行,你可以选择飞机、高铁、自驾游到目的地。也可以使用策略模式。

你要到达旅游的目的地是一个任务,有三种方式都可以到达,不同的交通方式时间不同,实现代码如下。

package com.qing.clms;

public interface ITravelByWhat {
    void travel(int km);
}

坐飞机

package com.qing.clms;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

public class ByAirplane implements ITravelByWhat{
    @Override
    public void travel(int km) {
        System.out.println("乘飞机需要"+Math.round(km*0.3/300)+"小时");
    }
}

 开车

package com.qing.clms;

public class ByCar implements ITravelByWhat {
    @Override
    public void travel(int km) {
        System.out.println("自己开车走高速需要" + Math.round(km* 1.1 / 80) + "小时");
    }
}

坐高铁

package com.qing.clms;

public class ByHighspeedRail implements ITravelByWhat{
    @Override
    public void travel(int km) {
        System.out.println("坐高铁需要"+Math.round(km*1.05/250)+"小时");
    }
}

策略模式Context:

将不同的实现行为通过参数传入策略模式Context的构造方法,可以在使用这些行为的类中消除条件语句

package com.qing.clms;

public class Context {
    private ITravelByWhat travelByWhat;

    public Context(ITravelByWhat travelByWhat) {
        this.travelByWhat = travelByWhat;
    }

    public void getResult(int km){
        travelByWhat.travel(km);
    }
}

测试

    @Test
    void test1() {
        Context context1 = new Context(new ByCar());
        context1.getResult(3000);
        Context context2 = new Context(new ByAirplane());
        context2.getResult(3000);
        Context context3 = new Context(new ByHighspeedRail());
        context3.getResult(3000);
    }

结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值