GOF设计模式-策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,降低了各种算法类与使用算法类之间的耦合。

这里写图片描述

Strategy:模拟客户端调用
Trip :出行方式接口
TripByBoot,TripByCar,TripByTrain,Trip接口的实现类

模拟一个去西藏的例子,去西藏的方式有很多,可以步行,可以开车去,可以坐火车。
去西藏的方式,就是策略模式中的算法,每种方式就代表一种算法,客户端根据需要选择不同的算法

首先出行方式接口

public interface Trip {

    public String execute();
}

三个出行方式

public class TripByBoot implements Trip {

    @Override
    public String execute() {
        System.out.println("100双鞋已经买好,随时可以出发。");
        return "";
    }
}
public class TripByCar implements Trip {

    @Override
    public String execute() {
        System.out.println("汽车已经准备好,随时可以出发。");
        return "";
    }
}
public class TripByTrain implements Trip {

    @Override
    public String execute() {
        System.out.println("火车票已经买好,随时可以出发。");
        return "";
    }
}

模拟客户端

public class Strategy {

    public void trip(String tripModle){
        Trip trip = null;
        switch (tripModle) {
            case "car":
                trip = new TripByCar(); // 开车去西藏
                break;
            case "Train":
                trip = new TripByTrain(); // 坐火车去西藏
                break;
            case "Boot":
                trip = new TripByBoot(); //徒步去西藏
                break;
            default:
                System.out.println("不支持" + "出行方式"); // 不能做飞机,因为直接升到高海拔,高反受不了
        }
        if (trip != null){
            trip.execute();
        }


    }


    public static void main(String[] args) {
        Strategy strategy = new Strategy();
        strategy.trip("Train");
        strategy.trip("Boot");
        strategy.trip("car");
        strategy.trip("airplane");
    }
}

策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码。
使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。

对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。
一个类定义了很多行为,而且这些行为在这个类里的操作以多个条件语句的形式出现。策略模式将相关的条件分支移入它们各自的 Strategy 类中以代替这些条件语句。

代码地址:https://github.com/mazh1992/model/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值