Java中的策略模式浅析及回调函数

策略模式

策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。

  策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。

  何时使用策略模式:

  1.如果在一个系统里面有许多类,他们之间的区别仅在于他们的行为,那么使用策略类可以动态的让一个对象在许多行为中选择一种行为。

  2.如果系统需要动态的在几种算法中选择一种,那么这些算法可以具体的包装到一个个算法类里面,而这些算法类都是一个抽象类的子类。换言之这些具体的算法类均有统一的接口,由于多态性的原则,客户端可以选择使用任何一个具体的算法类,并只持有一个数据类型是抽象算法类的对象。

  3.一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户涉及到不必要的算法和与算法相关的数据。

  例子:

  
//策略接口
public interface Person {
 void speak();
}

//策略接口的实现类
public class Chinese implements Person {

 @Override
 public void speak() {

  System.out.println("----说汉语------");
 }

}

 

//策略接口的实现类
public class English implements Person {

 @Override
 public void speak() {
  System.out.println("---------speak english--------");
 }

}

 

//策略调用类
public class Strategy {

 private Person person;
 
 public Strategy(Person person){
  this.person = person;
 }
 
 public void speak(){
  person.speak();
 }
}

 

//测试类
public class Test {

 public static void main(String [] args){
  
  Person person = new Chinese();
  Strategy strategy = new Strategy(person);
  strategy.speak();
 }
}

 

 

=================================================================================

//策略接口
public interface Person {
 void speak();
}

 

//策略调用类
public class Strategy {

 public void execute(Person callback)
 {
  callback.speak();
 } 
}

 

//测试类
public class Test {

 public static void main(String [] args){
  
  Strategy strategy = new Strategy();
  
  //说汉语
  strategy.execute(new Person(){
    public void speak()  //   execute(new doInhibernateCallBack(){ })
    {
     System.out.println("--------说汉语--------");
    }
  });
  
  //说英语
  strategy.execute(new Person(){
   public void speak()  //   execute(new doInhibernateCallBack(){ })
   {
    System.out.println("--------speak english--------");
   }
 });
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值