设计模式之策略模式

设计模式之策略模式

策略模式的简单介绍

策略模式(Strategy),二十三中设计模式之一,是一种比较常用的设计模式,策略模式,顾名思义,一种跟策略有关的设计模式,主要的思想是,当面对同一件事情有多种不同的解决方案的时候,根据不同的选择方案采用不同的策略,每一种策略都是一个独立的个体,这样子,当增加新的方案的时候,可以不用更改原有的代码,而直接编写新的策略,然后使用该策略即可,符合设计原则中的“开闭原则”,同时也使得代码的结构更加清晰,更加容易理解

策略模式的具体实现

假设现在我们在编写一个业务,比如说宽带办理业务,这个业务有多种不同的方案,比如说下面几种形式
- 经济型:20M带宽,每年666元
- 商务型:50M带宽,每年888元
- 豪华型:100M带宽,每年1000元
- 土豪型:1G带宽,每年100000元

在没有采用策略模式的时候,我们可能为按照下面的方式来实现


public void setupBandWidth(String type){
    if ("经济型".equalsIgnoreCase(type)){
        System.out.println("办理经济型套餐");
    }else if ("商务型".equals(type)){
        System.out.println("办理商务型套餐");
    }else if ("豪华型".equals(type)){
        System.out.println("办理豪华型套餐");
    }else if ("土豪型".equals(type)){
        System.out.println("办理土豪型套餐");
    }
}

单纯从实现上来说,这样子的实现是没有问题,但是当遇到业务需要不断扩展的时候,比如说增加两个新的套餐,这种直接硬编码的方式的缺点就出现了,每一次套餐的变化,我们都需要修改代码,这就违背了“开闭原则”了。这种实现方式不仅仅使得代码的结构变得庞大,还会在无形之中给每次修改都带来了危机。

接下来我们来看下采用策略模式之后的代码


/**
 * 策略接口
 */
interface BandWidthStrategy{
    void BandWidthService();
}

/**
 * 不同类型的策略
 */
class EconomicType implements BandWidthStrategy{

    @Override
    public void BandWidthService() {
        System.out.println("办理经济型套餐");
    }
}

class BusinessType implements BandWidthStrategy{

    @Override
    public void BandWidthService() {
        System.out.println("办理经济型套餐");
    }
}

class Luxurious implements BandWidthStrategy{

    @Override
    public void BandWidthService() {
        System.out.println("办理豪华型套餐");
    }
}

class TyrantType implements BandWidthStrategy{

    @Override
    public void BandWidthService() {
        System.out.println("办理土豪型套餐");
    }
}

/**
 * 服务上下文,主要是用于进行策略的切换
 */
class Context{
    private BandWidthStrategy bandWidthStrategy;

    public void setBandWidthStrategy(BandWidthStrategy bandWidthStrategy) {
        this.bandWidthStrategy = bandWidthStrategy;
    }

    public void service(){
        bandWidthStrategy.BandWidthService();
    }
}

可以看到,通过上面这种方式,代码的结构非常清新,用户选择对应的套餐,然后由客服为用户办理该套餐,而且,当要增加新的套餐的时候,我们不需要修改上面的任何代码,只需要编写新的套餐,然后实现我们的策略接口即可。

总结

策略模式主要是用于解决一种问题有多种不同的解决方案的时候,可以有效地避免了丑陋的代码结构,同时避免了在新增加新内容的时候需要修改原代码,当然,随着而来的是,类,或者说解决方案组的类的数量变多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值