码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2016-06-09 23:41:56      阅读:689      评论:0      收藏:0      [点我收藏+]

标签:

策略模式:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

抽象策略角色: 策略类,通常由一个接口或者抽象类实现。

具体策略角色:包装了相关的算法和行为。

环境角色:持有一个策略类的引用,最终给客户端调用。

代码实例

问题:旅游出行方式可以有多种,如可以乘坐飞机旅游,也可以乘火车旅游,如果有兴趣自行车游也是一种极具乐趣的出行方式。不同的旅游出行方式有不同的实现过程,客户根据自己的需要选择一种合适的旅游方式。请用策略模式来模拟这一过程,需要有测试程序。

技术分享

//策略接口
public interface TravelStrategy {
    
    void travel();
}

//飞机策略类
public class AirplaneStrategy implements TravelStrategy {

    @Override
    public void travel() {
        
        System.out.println("AirplaneStrategy!");    
    }
}

//自行车策略类
public class BicycleStrategy implements TravelStrategy{

    @Override
    public void travel() {
        
        System.out.println("BicycleStrategy!"); 
    }
}

//火车策略类
public class TrainStrategy implements TravelStrategy {

    @Override
    public void travel() {
        
        System.out.println("TrainStrategy!");   
    }
}

//策略类引用类:决策者
public class Person{
    
    private TravelStrategy strategy;

    public Person(TravelStrategy strategy) {
        
        this.strategy = strategy;
    }

    public void setStrategy(TravelStrategy strategy) {
        
        this.strategy = strategy;
    }
    
    public void travel(){
        
        strategy.travel();
    }
}

//测试类
public class Test {
    
    public static void main(String[] args) {
        
        TravelStrategy strategy = new AirplaneStrategy();
        Person person = new Person(strategy);
        person.travel();
        
        System.out.println("--------------------");
        
        TravelStrategy strategy1 = new TrainStrategy();
        person.setStrategy(strategy1);
        person.travel();
        
        System.out.println("--------------------");
        
        TravelStrategy strategy2 = new BicycleStrategy();
        person.setStrategy(strategy2);
        person.travel();
        
        System.out.println("--------------------");
    }
}

输出结果:
AirplaneStrategy!
--------------------
TrainStrategy!
--------------------
BicycleStrategy!
--------------------

策略模式

标签:

原文地址:http://www.cnblogs.com/crazy2016/p/5572942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!