目录
  1. 1. 前言
  2. 2. 使用方法
策略模式优化过多if-else

前言

软件开发过程中,经常会用到if-else做逻辑判断,当if-else过多,既不美观又不好维护。策略模式同单例模式一样,都是比较常见的设计模式。

使用方法

定义接口类

1
2
3
4
5
public interface Item {

    String call(String phoneName);

}

定义三个实现接口的实现类

1
2
3
4
5
6
7
8
9
10
11
@Component("apple")

public class AppleItem implements Item {

    @Override
    public String call(String phoneName) {
        System.out.println(phoneName);
        return "使用" + phoneName + "打电话";
    }

}
1
2
3
4
5
6
7
8
9
10
@Component("huawei")
public class HuaweiItem implements Item {

    @Override
    public String call(String phoneName) {
        System.out.println(phoneName);
        return "使用" + phoneName + "打电话";
    }

}
1
2
3
4
5
6
7
8
9
10
@Component("xiaomi")
public class XiaomiItem implements Item {

    @Override
    public String call(String phoneName) {
        System.out.println(phoneName);
        return "使用" + phoneName + "打电话";
    }

}

定义服务类,通过手机名称获取具体实现类,也可以调用方法处理相关逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Service
public class ItemService {

    @Autowired
    private Map<String,Item> items;

    public Item getItem(String phoneName){
        return items.get(phoneName);
    }

    public String call(String phoneName){
        return items.get(phoneName).call(phoneName);
    }

}

原理:将接口所有实现类放入到map中,以手机名字作为key,实现类作为value,通过手机名称获取具体实现类,再调用方法进行逻辑处理。@Autowired可将实现类全部注入到map中,不需要再定义静态代码块初始化map
调用测试

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringRunner.class)
@SpringBootTest
public class ItemTest {

    @Autowired
    private ItemService itemService;

    @Test
    public void test(){
        itemService.call("apple");
    }

}
文章作者: 微光
文章链接: http://www.guduke.cn/2020/08/12/strategy/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微光
打赏
  • 微信
  • 支付宝

评论