zoukankan      html  css  js  c++  java
  • 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
    

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

  • 相关阅读:
    Windows环境下多线程编程原理与应用读书笔记(7)————事件及其应用
    Windows环境下多线程编程原理与应用读书笔记(6)————临界段及其应用
    Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用
    [bzoj1910] [Ctsc2002] Award 颁奖典礼
    [bzoj4411] [Usaco2016 Feb]Load balancing
    [bzoj2654] tree
    [bzoj4410] [Usaco2016 Feb]Fence in
    [bzoj3143] [Hnoi2013]游走
    [bzoj1826] [JSOI2010]缓存交换
    [bzoj1483] [HNOI2009]梦幻布丁
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5062816.html
Copyright © 2011-2022 走看看