设计模式之策略模式

一、定义
策略模式:策略是对算法的封装,是一种形为模式,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。

二、实现
1、范例 - 曹操败走华容道
三国演义中曹操败走华容道的故事,相传在赤壁之战之后,曹操的船舰被刘备烧了,曹操逃离时面前有两条路:1、平坦的大路。2、泥泞的华容道。面对这两条路,曹操没有选择大路而选择有炊烟的小路「华容道路」,理由—实则虚之,虚则实之,那么曹操在选择道路的时候其实就是选择策略。

2、UML
这里写图片描述

3、代码
主接口

/**
 * 抽象的策略,定义逃跑路线
 */
public interface IRunStrategy {
    // 逃跑线路
    void escapeRoute() ;
}

具体策略(多种策略),实现接口
1.大路

/**
 * 具体的策略一走大路
 */
public class Highroad implements IRunStrategy {
    @Override
    public void escapeRoute() {
        System.out.println("走大路");
    }
}

2.华容道

/**
 * 具体的策略二走华容道
 */
public class HuaRongRoad implements IRunStrategy {
    @Override
    public void escapeRoute() {
        System.out.println("走华容道");
    }
}

定义上下文

/**
 * 上下文 持有 IRunStrategy 的引用
 */
public class ContextRunStrategy {

    private IRunStrategy iRunStrategy ;

    public ContextRunStrategy(IRunStrategy iRunStrategy){
        this.iRunStrategy = iRunStrategy ;
    }

    /**
     * 选择道路
     */
    public void choiceRoad(){
        iRunStrategy.escapeRoute();
    }
}

用户选择,选择路线(即选择策略)

/**
 * 曹操选择路线
 */
public class CaoCao {

    public static void main(String args[]){
        /**
         * 曹操疑心重,选择了华容道,对曹操来说至于杂样走华容道,不关心,死多少人也不关心,只关心我要走这条道就好
         */
        IRunStrategy huaRongRoad = new HuaRongRoad() ; //多态:向上转型。此时就是选择一种实现方式的策略
        ContextRunStrategy contextRunStrategy = new ContextRunStrategy(huaRongRoad) ;
        contextRunStrategy.choiceRoad();
    }
}

其实这种模式在平常的代码中常用,封装一个主接口,然后通过实现接口,重载方法实现不同功能。然后不同用户根据自己的选择,然后不同的实现方法。这就是一种策略。

注意:和工厂模式的逻辑有点类似。

摘抄:
https://segmentfault.com/a/1190000011918366#articleHeader4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值