一天一个设计模式-策略模式

一天一个设计模式-策略模式,第1张

策略模式(strategy Pattern)主要运用在多个算法中,使用者无需知道内部实现,只需要传递不同的参数,根据不同参数调用不同策略方法,比如一种场景支付功能,支付中有微信支付和支付宝支付。
1、创建一个接口

package com.poison.strategy;

/**
 * @author poison
 * @date 6/5/2022
 * @Description 策略接口
 **/
public interface IStrategy {
    /**
     * 执行方法
     */
    public void operate();
}

首先创建一个策略接口,然后提供一个方法,后面每个策略都会实现这个方法。
2、支付宝的支付策略

package com.poison.strategy;

/**
 * @author poison
 * @date 6/5/2022
 * @Description 支付宝支付策略
 **/
public class AlipayStrategy implements IStrategy {
    @Override
    public void operate() {
        System.out.println("支付宝支付 *** 作");

    }
}

3、微信的支付策略

package com.poison.strategy;

/**
 * @author poison
 * @date 6/5/2022
 * @Description
 **/
public class WePayStrategy implements IStrategy {
    @Override
    public void operate() {
        System.out.println("微信支付");
    }

}

如上直接创建子类去实现策略接口,然后在子类中写好他具体执行的方法,每个子类是一种执行效果
4、提供一个装载所有子类的类

package com.poison.strategy;

import java.util.HashMap;
import java.util.Map;

/**
 * @author poison
 * @date 6/5/2022
 * @Description 对外提供的 *** 作方法
 **/
public class Context {
    private static Map<String,IStrategy>  strategyMap=new HashMap<>();
    static {
        strategyMap.put("支付宝", new AlipayStrategy());
        strategyMap.put("微信", new WePayStrategy());
    }









    public  static  void operate(String strategyName) {
               strategyMap.get(strategyName).operate();
    }


}

这里使用map去装,实际还可以提供一个构造方法传递不同策略类来实现
下面是使用方法

package com.poison.strategy;

/**
 * @author poison
 * @date 6/5/2022
 * @Description
 **/
public class StrategyTest {
    public static void main(String[] args) {
        Context.operate("支付宝");
    }
}

执行上面代码会输出"支付宝支付 *** 作"

总结

由此可以看到策略模式高内聚低耦合的特点也表现出来了,还有一个就是扩展性,也就是 OCP 原则,策略类可以继续增加下去,只要修改 Context.java 创建子类就可以了,所以这个可以从某种意义上替代if-else加大代码可读性,缺点就是,会多很多的类。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/891458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存