课时59 | 策略模式
来源:互联网 发布:cmm软件成熟度模型 编辑:程序博客网 时间:2024/06/06 06:44
策略模式:针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换。
策略模式把算法的责任和算法本身分隔开,委派给不同的对象管理。
模式场景:
对一组数据进行排序,目前有三种排序方法,可以用最小的改动实现各个排序方法的切换。
设计思路:
我们先从具体的排序算法开始,在子类中封装排序算法:冒泡排序法和选择排序法
//封装了冒泡排序法class BubbleSort implements ISort{ public void sort(int [] array){ System.out.println("冒泡排序法"); for(i=0;i<array.length-1;i++){ for(j=0;j<array.length-i-1:j++){ if(array[j]>array[j+1]){ int temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } }}
//封装了选择排序法class SelectSort implements ISort{ public void sort(int [] array){ System.out.println("选择排序法"); int min=0 for(i=0;i<array.length;i++){ min=i; for(j=i+1;j<array.length;j++) if(array[min]>array[j]) min=j; } if(i!=min){ int temp=array[i]; array[i]=array[min]; array[min]=temp; } }}
定义一个排序接口,里面是排序算法的抽象方法。
interface ISort{ public void sort(int[] array);}
重点:定义一个Context的类,持有策略的接口对象,传入排序数据,调用抽象方法。
class Context{ //上下文持有策略 private ISort iSort=null; //策略传入接口的引用变量 public Context(ISort iSort){ this.iSort=iSort; } //排序功能 public void sort(int [] array){ //交给具体接受到的策略类对象来帮忙排序 iSort.sort(array); } //打印功能 public void printArray(int [] array){ for(int i=0;i<array.length;i++){ System.out.print(array[i]+" ") } }}
主方法:新建具体的排序方法对象,新建抽象的策略对象,把具体的方法对象传入策略对象中,实现排序的功能。
public static void main(String []args){ int [] array={1,34,25,66,34,62,73,90}; //新建各类算法策略的对象 ISort bubbleSort=new BubbleSort(); ISort selectSort=new SelectSort(); //切换策略对象,传入Context中 Context context=new Context(bubbleSort); context.sort(array); context.printArray(array); }
0 0
- 课时59 | 策略模式
- 课时8:DAO设计模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- System.Web.HttpContext.Current.Session获取值出错
- 占位
- log4j2的JsonLayout测试
- codeforces 449D
- HDU1695 GCD
- 课时59 | 策略模式
- 斐波那契数组的算法应用总结
- javaweb学习总结(四十一)——Apache的DBUtils框架学习
- golang中并发sync和channel
- C#之文件的复制,移动,删除学习案例
- 占位
- poj 2031 Building a Space Station
- 程序请求管理员权限
- Android自定义通知样式适配