Java设计模式之策略模式

本文介绍了Java设计模式中的策略模式,包括模式概述和具体实现。策略模式允许在运行时选择不同的算法,提高了代码的灵活性和可扩展性。文章通过出行策略的案例展示了如何创建抽象策略类、具体策略实现类以及上下文类,并在测试类中展示了不同策略的切换使用。
摘要由CSDN通过智能技术生成

Java设计模式之策略模式

1. 策略模式概述

1)策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以相互替换,这个模式让算法的变化独立于使用算法的客户。
2)这算法表现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、接口编程不是具体的类(定义了策略接口);第三、多用组合/聚合,少用继承(通过组合方式使用策略)。

策略更适用于一个操作的不同实现方式,比如出行,你既可以选择飞机,火车,也可以徒步,不使用策略模式时通过if else处理,使用策略类,通过不同的策略创建不同的出行实例,可以提高扩展与维护下。

2. 策略模式实现

/**
 * 出行策略类
 *
 * @author zrj
 * @date 2020/12/7
 * @since 1.0
 */
public abstract class TravelStrategy {
    /**
     * 定义算法,出行方法
     */
    public abstract void travel();

}

/**
 * 飞机出行
 *
 * @author zrj
 * @date 2020/12/7
 * @since 1.0
 */
public class AirPlaneStrategy extends TravelStrategy {
    @Override
    public void travel() {
        System.out.println("飞机出行...");
    }
}
/**
 * 火车出行
 *
 * @author zrj
 * @date 2020/12/7
 * @since 1.0
 */
public class TrainStrategy extends TravelStrategy {
    @Override
    public void travel() {
        System.out.println("火车出行...");
    }
}

/**
 * 徒步出行
 *
 * @author zrj
 * @date 2020/12/7
 * @since 1.0
 */
public class WalkStrategy extends TravelStrategy {
    @Override
    public void travel() {
        System.out.println("徒步出行...");
    }
}

/**
 * 出行上下文类,这个很重要,策略的关键
 * 这是一个上下文类,所有客户端都通过上下文类与不同算法交互,才能达到相互替换算法的效果
 *
 * @author zrj
 * @date 2020/12/7
 * @since 1.0
 */
public class TravelContext {
    private TravelStrategy travelStrategy;

    public TravelContext(TravelStrategy travelStrategy) {
        this.travelStrategy = travelStrategy;
    }

    // 定义调用算法的方法,封装调用细节
    public void travel() {
        travelStrategy.travel();
    }

}

/**
 * 模板测试类
 *
 * @author zrj
 * @date 2020/12/7
 * @since 1.0
 */
public class TravelTest {
    @Test
    public void travelTest() {
        System.out.println("-------------火车出行----------------");
        TravelContext trainContext = new TravelContext(new TrainStrategy());
        trainContext.travel();

        System.out.println("-------------飞机出行----------------");
        TravelContext airPlaneContext = new TravelContext(new AirPlaneStrategy());
        airPlaneContext.travel();

        System.out.println("-------------徒步出行----------------");
        TravelContext walkContext = new TravelContext(new WalkStrategy());
        walkContext.travel();

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值