爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          策略模式

          Posted on 2009-01-20 17:27 非洲小白臉 閱讀(207) 評論(0)  編輯  收藏 所屬分類: 模式
          設計模式-快餐簡解-【策略模式】

          策略模式應用場景舉例
          比如在玩“極品飛車”這款游戲,那么游戲對車的輪胎是可以更換的,不同的輪胎在高速轉彎時有不同的痕跡樣式,那么針對“汽車”的配件“輪胎”就要可以變化,而且輪胎和輪胎之間是可以相互替換的,這就是典型的要應用“策略模式”的場景!

          策略模式解釋
          類型:行為模式
            定義一組算法,將每個算法都封裝起來,并且使它們之間可以互換。策略模式使這些算法在客戶端調用它們的時候能夠互不影響地變化。

          策略模式UML圖

          策略模式-JAVA代碼實現
          從策略模式UML圖中可以看到Context與接口Strategy是組合關系,即強引用關系。

          新建一個輪胎接口:
          package strategy_interface;

          public interface tyre_interface {

              
          // tyre 輪胎
              public void print_tyre_line();// 顯示出輪胎的痕跡

          }

          新建2個輪胎接口的實現類:
          package strategy_implement;

          import strategy_interface.tyre_interface;

          //長痕跡輪胎類
          public class tyre_long_implement implements tyre_interface {

              
          public void print_tyre_line() {
                  System.out.println(
          "在路面上顯示一個長輪胎痕跡");
              }

          }

          package strategy_implement;

          import strategy_interface.tyre_interface;

          //短痕跡輪胎類
          public class tyre_short_implement implements tyre_interface {

              
          public void print_tyre_line() {
                  System.out.println(
          "在路面上顯示一個短輪胎痕跡");
              }

          }

          基于一個輪胎接口來實現不同樣式的輪胎樣式。

          組裝一個Car車類:
          package car_package;

          import strategy_interface.tyre_interface;

          public class Car {

              
          private String make_address;// 制造地
              private int death_year;// 報廢年限
              private int speed;// 速度
              private tyre_interface tyre_interface_ref;// 輪胎的樣式

              
          public String getMake_address() {
                  
          return make_address;
              }

              
          public void setMake_address(String make_address) {
                  
          this.make_address = make_address;
              }

              
          public int getDeath_year() {
                  
          return death_year;
              }

              
          public void setDeath_year(int death_year) {
                  
          this.death_year = death_year;
              }

              
          public int getSpeed() {
                  
          return speed;
              }

              
          public void setSpeed(int speed) {
                  
          this.speed = speed;
              }

              
          public tyre_interface getTyre_interface_ref() {
                  
          return tyre_interface_ref;
              }

              
          public void setTyre_interface_ref(tyre_interface tyre_interface_ref) {
                  
          this.tyre_interface_ref = tyre_interface_ref;
              }

              
          public void start() {

                  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();

              }
          }

          讓車跑起來,并且具有更換輪胎樣式的功能:
          package main_run;

          import strategy_implement.tyre_long_implement;
          import strategy_implement.tyre_short_implement;
          import car_package.Car;

          public class run_main {

              
          public static void main(String[] args) {

                  tyre_long_implement tyre_long_implement 
          = new tyre_long_implement();
                  tyre_short_implement tyre_short_implement 
          = new tyre_short_implement();
                  Car car 
          = new Car();
                  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類的前題下進行了不同輪胎樣式的改變,輪胎和輪胎之間可以互相替換,這就 是策略模式。
          主站蜘蛛池模板: 仲巴县| 沅陵县| 南安市| 灵宝市| 抚松县| 诸城市| 东乡族自治县| 根河市| 广东省| 云梦县| 洛扎县| 芒康县| 高淳县| 读书| 藁城市| 巢湖市| 漳州市| 繁峙县| 崇义县| 青阳县| 古交市| 托里县| 八宿县| 襄城县| 永春县| 中西区| 浦东新区| 时尚| 财经| 旬阳县| 黎平县| 淮北市| 米脂县| 南召县| 八宿县| 湾仔区| 望奎县| 米易县| 清原| 霸州市| 清流县|