课时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
原创粉丝点击