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

【从优秀源码中学习设计模式】---策略模式

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

【从优秀源码中学习设计模式】---策略模式

前言

本文以Java语言为主,分析包括JDK、Spring、MyBatis、Guava、org.apache.xxx中,等一些优秀的开源代码、项目,在这些开源代码、项目中都包含了大量的设计模式,通过对它们进行分析,能够快速帮助我们学会设计模式的使用方式,由理论过渡到实践中,进而真正了解设计模式的思想,由于内容较多,所以每个设计模式单独写一篇文章,需要了解其他模式请点击对应链接跳转。

建造者模式
装饰器模式
适配器模式

策略模式

策略模式比较简单,很多地方都有用到,可能并不是按照标准的模式,但思想还是一致的

org.apache.commons:commons-lang3
	
	private static abstract class Strategy {
		
		boolean isNumber() {
			return false;
		}

		abstract boolean parse(FastDateParser parser, Calendar calendar, String source, ParsePosition pos, int maxWidth);
	}

对应三种不同的策略

StrategyAndWidth 类似策略模式中的环境类

	private static class StrategyAndWidth {
		final Strategy strategy;
		final int width;

		StrategyAndWidth(final Strategy strategy, final int width) {
			this.strategy = strategy;
			this.width = width;
		}

		int getMaxWidth(final ListIterator lt) {
			if (!strategy.isNumber() || !lt.hasNext()) {
				return 0;
			}
			final Strategy nextStrategy = lt.next().strategy;
			lt.previous();
			return nextStrategy.isNumber() ? width : 0;
		}
	}

最后使用的地方

JDK

JDK中提供的线程池,其中拒绝策略的使用方式也用到了策略模式的思想

RejectedExecutionHandler策略接口类

public interface RejectedExecutionHandler {

    
    void rejectedExecution(Runnable r, ThreadPoolExecutor executor);
}

定义了四种不同的具体策略角色

ThreadPoolExecutor相当于策略模式中的环境类,RejectedExecutionHandler策略接口类做为其成员变量

通过构造方法赋值

最后直接使用即可

MyBatis

Executor相当于策略接口类,定义了很多接口方法

具体的策略类

DefaultSqlSession相当于策略环境类,也是通过构造方法的方式生成引入策略类Executor

获取具体策略类

把获取的策略类通过构造方法的方式赋给策略环境类的属性

最后直接使用

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

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

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