栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

package com.poison.strategy;


public interface IStrategy {
    
    public void operate();
}

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

package com.poison.strategy;


public class AlipayStrategy implements IStrategy {
    @Override
    public void operate() {
        System.out.println("支付宝支付操作");

    }
}

3、微信的支付策略

package com.poison.strategy;


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;


public class Context {
    private static Map  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;


public class StrategyTest {
    public static void main(String[] args) {
        Context.operate("支付宝");
    }
}

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

总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号