• java设计模式----策略模式


    策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 策略模式的好处在于你可以动态的改变对象的行为。

    策略模式主要有三个对象:抽象策略对象(它可由接口或抽象类来实现。),具体策略对象(它封装了实现同不功能的不同算法。),环境对象(该类中实现了对抽象策略中定义的接口或者抽象类的引用。)

    具体代码

    抽象接口

    package strategy;
    
    public interface TravelStrategy {
    	public void travelAlgorithm();  
    
    }
    

     具体实现类坐火车类

    package strategy;
    
    public class TrainStrategy implements TravelStrategy{
    
    	@Override
    	public void travelAlgorithm() {
    		System.out.println("i'm travel by train");
    	}
    
    }
    

     具体实现类坐飞机类

    package strategy;
    
    public class AirStrategy implements TravelStrategy{
    
    	@Override
    	public void travelAlgorithm() {
    		System.out.println("i'm travel by airplane");
    	}
    
    }
    

     具体实现类骑自行车类

    package strategy;
    
    public class BicycleStrategy implements TravelStrategy{
    
    	@Override
    	public void travelAlgorithm() {
    		System.out.println( "i'm travel by bike");
    	}
    
    }
    

     环境对象

    package strategy;
    
    /**
     * 环境对象
     * @author mercy
     *
     */
    public class PersonContext {
    	private TravelStrategy strategy;
    	public PersonContext(TravelStrategy strategy){
    		this.strategy=strategy;
    	}
    	public void travelAlgorithm(){
    		this.strategy.travelAlgorithm();
    	}
    }
    

     测试类

    package strategy;
    
    public class Test {
    	public static void main(String[] args) {
    		PersonContext strategy=new PersonContext(new AirStrategy());
    		strategy.travelAlgorithm();
    		strategy=new PersonContext(new BicycleStrategy());
    		strategy.travelAlgorithm();
    		strategy=new PersonContext(new TrainStrategy());
    		strategy.travelAlgorithm();
    	}
    
    }
    

     结果

    i'm travel by airplane
    i'm travel by bike
    i'm travel by train
    

    可以发现策略模式和代理模式在代码上还是有点像的,唯一的区别就是环境对象类不需要实现抽象接口,也就是说这个类统一了具体的行为。而代理类需要实现抽象接口,就是说代理类可以允许不同的行为实现。

  • 相关阅读:
    多线程
    异常
    接口
    多态
    对象和封装
    DIV+CSS命名规范集合
    MySql 最新官方安装教程-下载
    乐嘉性格色彩-4色特性,学习感悟
    Eclipse 的常用快捷方式
    学习方法_2011年编写和锻炼的思维题
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5062816.html
Copyright © 2020-2023  润新知