模式分解--策略模式初探

来源:互联网 发布:网络进度计划图 编辑:程序博客网 时间:2024/05/19 08:05

策略模式:定义算法族,分别封装起来、让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

针对接口编程与针对实现编程的区别:

A:针对实现编程:
 Dog dog = new Dog() ;
   dog.run();
B:针对接口编程:
 Animal animal = new Dog();
   animal.run();

 策略模式简单例子如下:
 
 说明:
 
 1、抽象类:
 Public abstract class Dog{
  
  // 跳跃行为接口
  JumpBehavior jumpBehavior:
  // 奔跑行为接口
  RunBehavior  runBehavior;
  
  public dog(){};
  
  public abstract void display();
  
  public void playRun(){
  
   runBehavior.run();
  }
  
  public void playJump() {
  
   runBehavior.jump();
   
  }
  // 构造方法
  public void setJumpBehavior(JumpBehavior jumpBehavior1){
   
    this.jumpBehavior = jumpBehavior1
  
  }
  
  public void setRunBehavior(RunBehavior runBehavior1){
   
    this.runBehavior = runBehavior1
  
  }
  
 }
 
  // 海狗不能跑,不能跳
  Public  class SeaDog extends Dog{
  
   public SeaDog(){
    
    jumpBehavior = new NoJumpDog();
    // 奔跑行为接口
     runBehavior = new NoRunDog();
   };
   
   public  void display() {
     System.out.println("I am seaDog");
   }
   
 }
 
   //正常狗能跑,能跳
  Public  class NorDog extends Dog{
  
   public NorDog(){
    // 通过接口访问到跳的实现类
    jumpBehavior = new JumpDog();
    // 通过接口访问到跑的实现类
     runBehavior = new RunDog();
   };
   
   public  void display() {
     System.out.println("I am normal Dog");
   }
   
 }
 
  // 模型狗不能跑,不能跳
  Public  class ModelDog extends Dog{
  
   public ModelDog(){
    
    jumpBehavior = new NoJumpDog();
    // 奔跑行为接口
     runBehavior = new NoRunDog();
   };
   
   public  void display() {
     System.out.println("I am ModelDog");
   }
   
 }
 
 
 2、行为接口
 
 Public interface JumpBehavior {
  
  public void  jump();
  
 }
 
 Public interface RunBehavior {
  
  public void  run();
  
 }
 
 // 可以跳的
 Public class CanJumpDog implements JumpBehavior{
 
  public void  jump() {
   System.out.println("I can jum");
  ;
  
 }

 // 不能跳的
  Public class NoJumpDog implements JumpBehavior{
 
    public void  jump() {
     System.out.println("I can't jum");
     }
   }
  ;
  
 // 可以跑的
 Public class CanRunDog implements RunBehavior{
 
  public void  run() {
   System.out.println("I can Run");
  }
  
 }

 // 不能跑的
  Public class NoRunpDog implements RunBehavior{
 
  public void  run() {
   System.out.println("I can't Run");
  }
  
 }
 
 测试运行代码:
 
 Public Class testDog{
 
   Public static void mail(String[] args){
    
    Dog dog = new NorDog();
    
    dog.playRun();//输出能跑
    
    dog.playJump();//输出能跳
    
    Dog dog = new ModelDog();
    
    dog.playRun();//输出不能跑
    
    dog.playJump();//输出不能跳
    
    JumpBehavior canJump = new CanJumpDog();
    // 输入可跳行为
    dog.setJumpBehavior(canJump)
    
    dog.playJump();//输出能跳
    
   }
 
 }
 
 总结:少用继承、多用组合。