一、什么是策略设计模式
策略设计模式(Strategy Pattern)定义了一系列的算法,并将每一个算法封装起来,而且使它们之间可以互相替换。策略模式让算法的变化不会影响到使用算法的客户。
分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。
二、策略设计模式结构图
这个类图并不复杂,右边是策略接口以及它的实现类,左边会有一个上下文,这个上下文会拥有一个策略,而具体这个策略是哪一种,我们是可以随意替换的
三、策略模式写法举例
我们需要实现这样一个功能:
- 我们需要对一批不同格式的文件进行处理
- 文件类型有 mp4,avi,rmvb,不同格式的文件使用不同的文件解析器来解析文件
- 文件类型可不一定只有这几种,随着业务的扩展会不断增加, 比如 : txt, jpg,png等等
下面,我们使用策略设计模式来实现这个功能:
首先,先来定义一个文件类型的枚举和自定义的一个文件类,用于描述我们处理的文件类型
public class MyFile { private FileType fileType; private String fileName; private String filePath; public MyFile(Builder builder) { this.fileType = builder.fileType; this.fileName = builder.fileName; this.filePath = builder.filePath; } public static Builder builder() { return new Builder(); } public static class Builder { private FileType fileType; private String fileName; private String filePath; public Builder fileType(FileType fileType) { this.fileType = fileType; return this; } public Builder fileName(String fileName) { this.fileName = fileName; return this; } public Builder filePath(String filePath) { this.filePath = filePath; return this; } public MyFile build() { return new MyFile(this); } } public FileType getFileType() { return fileType; } public String getFileName() { return fileName; } public String getFilePath() { return filePath; } @Override public String toString() { return "MyFile{" + "fileType=" + fileType + ", fileName='" + fileName + '\'' + ", filePath='" + filePath + '\'' + '}'; } }
MyFile
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:设计模式之 ==> 策略设计模式 - Python技术站