策略模式和适配器模式的区别

本文探讨了策略模式和适配器模式的区别。策略模式中,调用者对每个策略的结果有预期,如Arrays.sort()使用特定比较器进行排序。而适配器模式中,调用者关注的是流程中某个环节,不关心具体实现,如ha.handle()调用未知接口,但知道其在流程中的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式

对于策略模式来说,在调用者看来每个策略都是已知的策略,对于会返回怎样的结果,有着一个预期
例如调用Arrays.sort(T[], java.util.Comparator<? super T>)

    public static void main(String[] args) {
        List<Integer> lists = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        //java.util.Arrays.sort(T[], java.util.Comparator<? super T>)
        //选择算法
        //对大于5的数升序排列
        //对小于等于五的数降序排列
        lists.sort((num1, num2) -> {
            if (num2>5)
            return 1;
            else return -1;
        });
        for (Integer integer : lists) {
            System.out.print(integer+",");
        }
    }

在这里插入图片描述
可以看到,按照选择的策略给出了期待的结果

适配器模式

对于适配器来说,在调用者看来目标多是未知的接口,但是一定是流程中指定的哪一环

org.springframework.web.servlet.DispatcherServlet#doDispatch
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
				// Determine handler adapter for the current request.
				HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
...

				// Actually invoke the handler.
				mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
...

在这里插入图片描述

可以看到当ha.handle编写时,它并不知道会调用HelloController#hello,但是它知道这里是进行调用目标方法的处理,之后是进行调用applyPostHandle
在这里插入图片描述

总结

策略模式更关心结果,适配器模式更关心过程
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值