频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
java设计模式(三)策略模式(行为型)
2017-03-11 09:28:54         来源:xqhadoop的博客  
收藏   我要投稿

java设计模式(三)策略模式(行为型):依稀记得我们本科时学过各种排序算法,比如冒泡排序,二分排序,归并排序等等。这些算法在功能上是一致的,只是其中的实现方式不同,时间复杂度和空间复杂度的差别而已。

但是当我们作为系统开发者时,需要为用户提供相同问题不同的算法的实现。这时我们可以考虑使用策略模式来解决问题。

一.策略模式理解

策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户。策略模式的变化点在于算法的具体实现不同,而封装变化点是面向对象的一种重要的思维方式。策略模式定义的这些算法完成的都是相同的工作,只是实现不同,该模式提供一致的接口访问所有的算法。

二.实践

这里我们以排序为例来说明策略模式的应用

1.定义排序接口,或者协议

//排序接口
public interface Sort(){
public void sort();
}

2,具体各种排序实现算法

//冒泡排序算法
public BubbleSort(){
public void sort(){
System.out.println("bubble sort")
}
}
//二分排序算法
public BinarySort(){
public void sort(){
System.out.println("binary sort");
}
}
//归并排序算法
public MergeSort(){
public void sort(){
System.out.println("merge sort");
}
}

3.客户端调用程序

public class ClientContext{
public void main(){
//调用冒泡排序
Sort bubble=new BubbleSort();
bubble.sort();
}
}

这里我们将对象的创建工作直接放在了客户程序中。似乎觉得不是那么妥当,还记得我们之前讲过的设计模式创建型-工厂模式吗?我们可以将对象创建过程使用工厂模式完成。

4.程序改进之路

我们使用简单工厂来改进上面的客户端程序。

//排序算法生产工厂
SortFactory{
#定义排序枚举变量
public enum SortType{
Bubble,Binary,Merge;
}
#提供不同排序算法的选择接口
public Sort getSort(SortType type){
switch(type){
case Bubble:return new Bubble();
case Binary:return new Binary();
case Merge:return new Merge();
}
}
}
//客户端程序
public class ClientContext{
public static void main(String[]args){
#调用排序
Sort customsort=SortFactory.getSort(SortType.Bubble);
customsort.sort();
}
}

三.总结

其实这样的程序仍然存在问题,如果程序多次调用排序类,那么我们需要不断的创建该类的对象。我们有时可以通过将排序类设计成单例来减少类的创建工作,我们需要知道设计模式的应用场景才可以灵活真正的应用好设计模式。

所以任何一个问题的解决并不是单纯使用一种设计模式来解决,所以我之前一直在强调知道这个设计模式的应用场景以及该设计模式的优缺点比你背上相应设计模式的模板代码深的许刻多。

点击复制链接 与好友分享!回本站首页
上一篇:jdk动态代理
下一篇:设计模式之策略模式
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站