您的位置:首页 > 其它

策略模式基本应用Strategy Pattern

2018-02-16 13:10 148 查看
策略模式,我的理解就是利用java多态的特性,隐藏其实现类,通过调用其接口,来调用相应的实现类,这个和RSF调用中指定相应的impl,有些相似。
标准的解释,替换某个算法的具体细节,而不需要完全重写代码。甚至可以在运行时进行替换,和依赖一同使用。
如果依赖注入的接口有多个实现类,比如service 有多个实现,那这样可以指定对应的实现,通过 @Resource或者 @Autowire指定实现类的方式如下@Resource(name="imgDataDao")
private DataDao xx;
或者:
@Autowired
@Qualifier("imgDataDao")
private DataDao yy;在实践中就可以指定不同的数据实现中间件,来进行不同的数据库操作。
简单说,策略模式就是java语言特性中的多态
定义一个打印日志的接口,再写两个实现类,一个打印在控制台,一个写入在本地文件



接口:public interface Log {
void printLog(String message);
}控制台实现:public class ConsoleLog implements Log {
@Override
public void printLog(String message) {
System.out.println(message);
}
}写入文件实现:public class WriteLog implements Log{
@Override
public void printLog(String message) {
try {
/*
* 路径说明,如果是 path是根路径则根据系统转换,如果是相对路径是就从项目工程目录family-admin-web往下
* . 当前目录,..当前目录往上
*/
FileOutputStream fos = new FileOutputStream("../file4.txt");
char[] array = message.toCharArray();
for (int i = 0; i < array.length; i++) {
try {
fos.write(array[i]);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}测试类: @Test
public void test() {
Log log = new ConsoleLog();
log.printLog("123");
}

@Test
public void test01() throws Exception {
Log log = new WriteLog();
log.printLog("123 message");
}策略模式是相对比较简单的模式,类似简单的还有模板模式,设计模式使用的问题在于多种设计模式的复合使用。从来不是单独而存在的,但20多种设计模式是整个软件工程的基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: