策略模式

来源:互联网 发布:淘宝卖家账号是什么 编辑:程序博客网 时间:2024/05/16 11:26

应用策略模式设计并实现一个使用几种排序算法对整数进行排序的程序。


1:设计排序程序的类图。

2:要求程序包括客户端、Context类、策略类。

3、编写实现的代码。

 

 设计类图:

 

 

1.策略(Strategy) : StrategyInterface.java 

public interface StrategyInterface{

  public abstract void algorithm(int [] a);

}

 

2.具体策略(ConcreteStrategy: StrategyAlgorithmOne.java 

 public class StrategyAlgorithmOne   implements  StrategyInterface{

public void algorithm(int [] a){ // 排序算法一

//遍历输出排序后的数组

        int temp = 0;

        for (int i = 0; i < a.length; i++) {

          for (int j = 0; j < a.length - 1; j++) {

            if (a[i] > a[j]) {

              // 没有动作

           } else {

                  temp = a[i];

                  a[i] = a[j];

                  a[j] = temp;

           }

        }

        }

        // 打印冒泡排序过后的数组

        System.out.println("冒泡排序后:");

    for (int j = 0; j < a.length; j++) {

       System.out.print(a[j]+" ");

    }

}

 

2.具体策略(ConcreteStrategy: StrategyAlgorithmTwo.java 

public class StrategyAlgorithmTwo implements StrategyInterface{

public void algorithm(int [] a){ // 排序算法二

 int temp;

       int offset =0;

       for (int i = 0; i < a.length; i++) {

           temp = a[i];

           offset =0;//offset指到每一次排序中最小元素的位置

           for (int j = i+1; j<a.length; j++) {

               if ( temp > a[j]) {

                   temp = a[j];

                   offset = j;

               }

           }

           if(offset>i)

           {

               a[offset] = a[i]; 

               a[i] = temp;

           }

//         遍历输出排序后的数组

           System.out.print("" + (i + 1) + "次:");

           for (int k = 0; k < a.length; k++) {

               System.out.print(a[k]+" ");

           }

           System.out.println("");

       }

 

    }

}

 

 

 

2.具体策略(ConcreteStrategy: StrategyAlgorithmThree.java 

import java.util.Arrays;

public class StrategyAlgorithmThree implements StrategyInterface{//排序算法三

public void algorithm(int [] a){

    for(int i=1;i<a.length;i++){

            int insertVal = a[i];

            // insertValue准备和前一个数比较

            int index=i-1;

              

            while(index>=0&&insertVal<a[index])

            {

                //  将把arr[index]向后移动

a[index+1]=a[index];

                // index向前移动一位

                index--;

            }

              

            // insertValue插入到适当位置

            a[index+1]=insertVal;

     }

 

 

//遍历输出排序后的数组

    System.out.print("插入排序后:");

    for(int i=0;i<a.length;i++)

    {

        System.out.print(a[i]+" ");

    }

 }

}

 

3.上下文: AlgorithmContext.java 

public class  AlgorithmContext {

     StrategyInterface   strategy;

     public void setStrategy(StrategyInterface strategy){

         this.strategy=strategy;

     } 

     public void SortArray(int [] a){

        if(strategy!=null)

          strategy.algorithm(a); 

        else

          System.out.println("策略为空,错误!");

     }

}

4.应用: Application.java_1

 

public class Application {

 

/**

 * @param args

 */

public static void main(String[] args) {

// TODO 自动生成方法存根

 int a[] = {3,8,1,4,4,10,7,6,5,2};

 int b[] = {3,8,1,4,4,10,7,6,5,2};

 int c[] = {3,8,1,4,4,10,7,6,5,2};

 AlgorithmContext algorithmContext =new AlgorithmContext (); 

// 算法一:冒泡排序

 System.out.println("原数组为:");

 for (int j = 0; j < a.length; j++) {

        System.out.print(a[j]+" ");

 }

 System.out.println();

 algorithmContext.setStrategy(new StrategyAlgorithmOne ()); 

 algorithmContext. SortArray(a);   

 //算法二:选择排序

 System.out.println();

 System.out.println("原数组为:");

 for (int j = 0; j < b.length; j++) {

       System.out.print(b[j]+" ");

 }

 System.out.println();

 System.out.println("进入选择排序:");

 algorithmContext.setStrategy(new StrategyAlgorithmTwo ());  

 algorithmContext. SortArray(b);  

 //算法三:插入排序

 System.out.println("原数组为:");

 for (int j = 0; j < c.length; j++) {

       System.out.print(c[j]+" ");

 }

 System.out.println();

 algorithmContext.setStrategy(new StrategyAlgorithmThree ());  

 algorithmContext. SortArray(c);  

 

}

 

}

 

运行结果:

 

0 0
原创粉丝点击