策略模式

前言

策略设计模式难易程度应该是仅次于单例模式的,无论是实现起来还是从结构上看,都非常简单,他跟简单工厂都一部分思想类似,大家可以结合一下简单工厂来看策略模式,大家千万不要记混了哦。

正文

简述什么是策略模式:它定义一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户端应用而独立变化。

策略模式适用场景:策略模式适合解决当程序出现多个不同分支,而且每个分支的逻辑还比较复杂的场景。

举个例子:有一个业务要根据不同的类型选择不同的算法或者选择不同类型的支付方式,等等。

使用和阅读提示:并不是所有的策略模式都和本文案例一样,但不变的是思想,我们学设计模式学的就是思想。我们在网上找资料大家都知道写法千奇百怪,没有说谁都一定是对或错,就好比,同样是以支付为场景写的demo,下面这个写法就与为不同,他更偏向于实际业务需求,大家使用的时候各取所需就好了。

参考文献:

下面介绍策略模式都几个角色

  • Context(环境类):负责使用算法策略,其中维持了一个抽象策略类的引用实例。
  • Strategy(抽象策略类):所有策略类的父类,为所支持的策略算法声明了抽象方法。=> 既可以是抽象类也可以是接口
  • ConcreteStrategy(具体策略类):实现了在抽象策略类中声明的方法。

 

 

代码讲解

万物的开始皆源于一个接口——策略类

public interface PayStrategy {
     //支付的动作
     String doPay(String payer, int money);
}

具体策略类(ConcreteStrategy)。我定义了三个支付方式,分别实现了策略类。这一步和简单工厂很相像吧,都实现同一个接口。

public class AliPayStrategy implements PayStrategy{
    public String doPay(String payer, int money) {
        //调用阿里支付的三方操作……
        System.out.println("调用阿里支付成功,"+payer+"支付了" + money + "元");
        return "ok";
    }
}

public class ApplePayStrategy implements PayStrategy {
    public String doPay(String payer, int money) {
        //调用苹果支付的三方操作……
        System.out.println("调用苹果支付成,"+payer+"支付了" +  money + "元");
        return "ok";
    }
}

public class WeChatPayStrategy implements PayStrategy {
    public String doPay(String payer, int money) {
        //调用微信支付的三方操作……
        System.out.println("调用微信支付成功,"+payer+"支付了" + money + "元");
        return "ok";
    }
}

上下文环境(Context),注入接口,提供构造方法,定义调用接口的方法。

public class Context {
    //策略模式核心类
    private PayStrategy payStrategy;

    public Context(PayStrategy payStrategy) {
        this.payStrategy = payStrategy;
    }

    //策略模式核心方法,用来调用支付动作的
    public String executeStrategy(String payer, int money) {
        return payStrategy.doPay(payer, money);
    }
}

让我们来测试一下

public class StrategyTest {
    public static void main(String[] args) {
        Context context = new Context(new AliPayStrategy());
        System.out.println(context.executeStrategy("胖虎", 5));
    }
}

输出结果

喜欢都话请关注或打赏

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值