Java设计模式01-策略模式

一、策略模式的定义

  定义了算法簇,分别封装起来,让它们之间可以互相替代,此模式让算法的变化独立于使用算法的客户。

 

 

 

 

二、Java实现例子
package strategy;

public class Human {
       //这里面向接口的编程方式,使用接口的引用。
       protected SayHelloBehavior sayHelloBehavior;
       //打招呼的方法
       public void sayHello() {
              sayHelloBehavior.sayHello();
       }
       public SayHelloBehavior getSayHelloBehavior() {
              return sayHelloBehavior;
       }
       public void setSayHelloBehavior(SayHelloBehavior sayHelloBehavior) {
              this.sayHelloBehavior = sayHelloBehavior;
       }
       
}

定义一个打招呼的接口

package strategy;

public interface SayHelloBehavior {
       void sayHello();
}

定义一个英国人类和用英语打招呼的实现类。

package strategy;
//实现打招呼接口
public class SayHelloByEnglish implements SayHelloBehavior{

       @Override
       public void sayHello() {
              // TODO Auto-generated method stub
              System.out.println("hey guys");
       }
       
}

package strategy;
//继承人类基类
public class English extends Human{
       //英国人掌握了英语技能包
       public English() {
              this.sayHelloBehavior = new SayHelloByEnglish();
       }
}

定义一个天朝人类和用国语打招呼实现类

package strategy;
//实现打招呼接口
public class SayHelloByChinese implements SayHelloBehavior{

       @Override
       public void sayHello() {
              // TODO Auto-generated method stub
              System.out.println("泥嚎!");
       }

}

package strategy;
//继承人类基类
public class Chinese extends Human {
       //做为一个国人当然掌握了国语技能包
       public Chinese() {
              this.sayHelloBehavior =  new SayHelloByChinese();

测试类

package strategy;

public class Test {

       public static void main(String[] args) {
              // TODO Auto-generated method stub
              //创建一个国人xiaoming
              Human xiaoming = new Chinese();
              //小明打招呼
              xiaoming.sayHello();
              //创建一个英国人james
              Human james = new English();
              //james打招呼              
              james.sayHello();
              //james来到我大天朝学习博大精深的国语。              
              james.setSayHelloBehavior(new SayHelloByChinese());
              //James使用国语打招呼              
              james.sayHello();
       }

}


输出

泥嚎!
hey guys
泥嚎!
三、在jdk中的应用例子

Arrays.sort(Object[] objs,Comparator comparator),通过传入具体的Comparator实例实现不同的排序规则。

定义两个Comparator的实现类

class HumanAgeDescComparator implements Comparator<Human>{


    @Override
    public int compare(Human arg0, Human arg1) {
        // TODO Auto-generated method stub
        return arg1.getAge()-arg0.getAge();
    }
    
}
class HumanNameDescComparator implements Comparator<Human>{

    @Override
    public int compare(Human arg0, Human arg1) {
        // TODO Auto-generated method stub
        return arg1.getName().compareTo(arg0.getName());
    }
    
}

测试

import java.util.Comparator;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Human xiaoming = new Chinese("xiaoming");
        Human james = new English("james");
        xiaoming.setAge(10);
        james.setAge(23);
        Human[] humanArray = new Human[2];
        humanArray[0] = xiaoming;
        humanArray[1] = james;
        Arrays.sort(humanArray,new HumanAgeDescComparator());
        System.out.println(Arrays.toString(humanArray));
        Arrays.sort(humanArray,new HumanNameDescComparator());
        System.out.println(Arrays.toString(humanArray));
    }

}

输出
[james, xiaoming]
[xiaoming, james]


 

posted @ 2018-07-11 17:11  Panic1  阅读(145)  评论(0)    收藏  举报