路漫漫其修远兮。。。

<<设计模式——行为模式>>

上一篇 / 下一篇  2010-06-28 13:52:10 / 个人分类:Development

策略模式应用场景举例    比如在玩“极品飞车”这款游戏,那么游戏对车的轮胎是可以更换的,不同的轮胎在高速转弯时有不同的痕迹样式,那么针对“汽车”的配件“轮胎”就要可以变化,而且轮胎和轮胎之间是可以相互替换的,这就是典型的要应用“策略模式”的场景!从程序结构中可以看到,完全符合了前面我们的要求:“灵活”,“顺序敏感”。­

    【策略模式解释­

    类型:行为模式­

    定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。­

    【策略模式UML图­

­图片

    【策略模式-JAVA代码实现­

    从策略模式UML图中可以看到Context与接口Strategy是组合关系,即强引用关系。­

    新建一个轮胎接口:­

packagestrategy_interface;­

public interfacetyre_interface {­

    // tyre 轮胎­

    public void print_tyre_line();// 显示出轮胎的痕迹­

}­

    新建2个轮胎接口的实现类:­

packagestrategy_implement;­

importstrategy_interface.tyre_interface;­

//长痕迹轮胎类­

public class tyre_long_implement implementstyre_interface {­

    public voidprint_tyre_line() {­

        System.out.println("在路面上显示一个长轮胎痕迹");­

    }­

}packagestrategy_implement;­

importstrategy_interface.tyre_interface;­

//短痕迹轮胎类­

public class tyre_short_implement implementstyre_interface {­

    public voidprint_tyre_line() {­

        System.out.println("在路面上显示一个短轮胎痕迹");­

    }­

}­

基于一个轮胎接口来实现不同样式的轮胎样式。    组装一个Car车类:­

packagecar_package;­

importstrategy_interface.tyre_interface;­

public classCar {­

    private String make_address;// 制造地­

    private int death_year;// 报废年限­

    private int speed;// 速度­

    private tyre_interface tyre_interface_ref;// 轮胎的样式­

publicString getMake_address() {­

        returnmake_address;­

    }­

    public voidsetMake_address(String make_address) {­

        this.make_address =make_address;­

    }­

    public intgetDeath_year() {­

        returndeath_year;­

    }­

    public void setDeath_year(intdeath_year) {­

        this.death_year =death_year;­

    }­

    public intgetSpeed() {­

        returnspeed;­

    }­

    public void setSpeed(intspeed) {­

        this.speed =speed;­

    }­

    publictyre_interface getTyre_interface_ref() {­

        returntyre_interface_ref;­

    }­

    public voidsetTyre_interface_ref(tyre_interface tyre_interface_ref) {­

        this.tyre_interface_ref =tyre_interface_ref;­

    }­

    public voidstart() {­

        System.out.println("车的基本信息为:");­

        System.out.println("制造地make_address:" + this.getMake_address());­

        System.out.println("报废年限death_year:" + this.getDeath_year());­

        System.out.println("速度speed:" + this.getSpeed());­

­

        System.out.println("Car 起动了!");­

­

        System.out.println("Car高速行驶,遇到一个大转弯,路面显示:");­

        this.getTyre_interface_ref().print_tyre_line();­

    }­

}    让车跑起来,并且具有更换轮胎样式的功能:­

packagemain_run;­

importstrategy_implement.tyre_long_implement;­

importstrategy_implement.tyre_short_implement;­

importcar_package.Car;­

public classrun_main {­

    public static voidmain(String[] args) {­

        tyre_long_implement tyre_long_implement = newtyre_long_implement();­

        tyre_short_implement tyre_short_implement = newtyre_short_implement();­

        Car car = newCar();­

        car.setDeath_year(8);­

        car.setMake_address("上海浦东新区");­

        car.setSpeed(200);­

        car.setTyre_interface_ref(tyre_long_implement);­

        car.start();­

    }­

}­

    控制台打印出:­

车的基本信息为:­

制造地make_address:上海浦东新区

报废年限death_year:8­

速度speed:200­

Car 起动了!­

Car高速行驶,遇到一个大转弯,路面显示:­

在路面上显示一个长轮胎痕迹­

    是一个长轮胎痕迹,但在程序中可以使用代码:car.setTyre_interface_ref(tyre_long_implement);来对轮胎的样式进行不同的替换,可以替换成短轮胎痕迹的汽车轮胎,这样在不更改Car类的前题下进行了不同轮胎样式的改变,轮胎和轮胎之间可以互相替换,这就是策略模式。­

图片­

­

­


TAG:

 

评分:0

我来说两句

EasternCowboy

EasternCowboy

To be a devout priest !

日历

« 2024-05-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 21734
  • 日志数: 49
  • 图片数: 3
  • 建立时间: 2009-08-21
  • 更新时间: 2011-03-16

RSS订阅

Open Toolbar