设计模式之策略模式

策略模式

说明:一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。

 

UML图如下所示:

 

 

代码如下所示:

package com.dai.strategy;
 
public interface Sort {
          public int[] sortNum(int[] arr);
        } 

package com.dai.strategy;
 
/**
 *
 * @author 戴礼明
 *日期: 2016-6-4
 *content:冒泡排序
 */

public class Bubble implements Sort{
 
         public int[] sortNum(int[] arr) {
                  
                   for(int i=1;i<arr.length;i++){
                            for(int j=0;j<arr.length-i;j++){
                                     if(arr[j]>arr[j+1]){
                                               int tmp=arr[j];
                                               arr[j]=arr[j+1];
                                               arr[j+1]=tmp;                                   }
                            }
                   }
                   System.out.println("我是冒泡排序!");
                  return arr;
         }
}

package com.dai.strategy;

/**
 *
 * @author 戴礼明
 *日期: 2016-6-4
 *content:插入排
 */

public class InsertionSort implements Sort{
         public int[] sortNum(int[] arr) {                  
                   for(int i=1;i<arr.length;i++){                           
                            int j=i-1;
                            int tmp=arr[i];
                             while(j>=0&&arr[j]>tmp){
                                      arr[j+1]=arr[j];
                                       j--;
                             }
                             arr[j+1]=tmp;
                   }
                   System.out.println("我是插入排序算法");
                   return null;
         }         
}

package com.dai.strategy;
/**
 *
 * @author 戴礼明
 *日期: 2016-6-4
 *content:选择排序
 */

public class SelectionSort implements Sort{

         public int[] sortNum(int[] arr) {                  
            int index=0;
         
              for(int i=0;i<arr.length;i++){
                       index=i;
                       for(int j=i+1;j<arr.length;j++){
                                 if(arr[j]<arr[index]){
                                          index=j;
                                 }
                       }
                       if(index!=i){
                                 int tmp=arr[i];
                                 arr[i]=arr[index];
                                 arr[index]=tmp;
                       }
              }
                 System.out.println("我是选择排序!");
                   return arr;
         }   
}

package com.dai.strategy;
 
/**
 * @author 戴礼明
 *日期: 2016-6-4
 *content:操作运算
 */

public class Operation {

         private Sort sort;       
         public Operation(Sort sort) {
                   this.sort=sort;
         }
                 public void operation(int[] arr){
                   sort.sortNum(arr);
         }
}        

package com.dai.strategy;

/**
 *
 * @author 戴礼明
 *日期: 2016-6-4
 *content:策略模式测试
 */
public class TestStrategy {
 
         public static void main(String[] args) {
                   int[] a={2,1,4,3,6,2,7,8};
                   Operation operation=new Operation(new Bubble());
                   operation.operation(a);               
                   Operation operations=new Operation(new SelectionSort());
                   operations.operation(a);            
                   Operation operationss=new Operation(new InsertionSort());
                   operationss.operation(a);              
         }
}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值