爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術(shù)
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          日歷

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          策略模式

          Posted on 2009-01-20 17:27 非洲小白臉 閱讀(212) 評(píng)論(0)  編輯  收藏 所屬分類: 模式
          設(shè)計(jì)模式-快餐簡(jiǎn)解-【策略模式】

          策略模式應(yīng)用場(chǎng)景舉例
          比如在玩“極品飛車”這款游戲,那么游戲?qū)嚨妮喬ナ强梢愿鼡Q的,不同的輪胎在高速轉(zhuǎn)彎時(shí)有不同的痕跡樣式,那么針對(duì)“汽車”的配件“輪胎”就要可以變化,而且輪胎和輪胎之間是可以相互替換的,這就是典型的要應(yīng)用“策略模式”的場(chǎng)景!

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

          策略模式UML圖

          策略模式-JAVA代碼實(shí)現(xiàn)
          從策略模式UML圖中可以看到Context與接口Strategy是組合關(guān)系,即強(qiáng)引用關(guān)系。

          新建一個(gè)輪胎接口:
          package strategy_interface;

          public interface tyre_interface {

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

          }

          新建2個(gè)輪胎接口的實(shí)現(xiàn)類:
          package strategy_implement;

          import strategy_interface.tyre_interface;

          //長(zhǎng)痕跡輪胎類
          public class tyre_long_implement implements tyre_interface {

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

          }

          package strategy_implement;

          import strategy_interface.tyre_interface;

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

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

          }

          基于一個(gè)輪胎接口來(lái)實(shí)現(xiàn)不同樣式的輪胎樣式。

          組裝一個(gè)Car車類:
          package car_package;

          import strategy_interface.tyre_interface;

          public class Car {

              
          private String make_address;// 制造地
              private int death_year;// 報(bào)廢年限
              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(
          "報(bào)廢年限death_year:" + this.getDeath_year());
                  System.out.println(
          "速度speed:" + this.getSpeed());

                  System.out.println(
          "Car 起動(dòng)了!");

                  System.out.println(
          "Car高速行駛,遇到一個(gè)大轉(zhuǎn)彎,路面顯示:");
                  
          this.getTyre_interface_ref().print_tyre_line();

              }
          }

          讓車跑起來(lái),并且具有更換輪胎樣式的功能:
          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(
          "北京朝陽(yáng)區(qū)");
                  car.setSpeed(
          200);
                  car.setTyre_interface_ref(tyre_long_implement);
                  car.start();

              }
          }

          控制臺(tái)打印出:
          車的基本信息為:
          制造地make_address:北京朝陽(yáng)區(qū)
          報(bào)廢年限death_year:
          8
          速度speed:
          200
          Car 起動(dòng)了!
          Car高速行駛,遇到一個(gè)大轉(zhuǎn)彎,路面顯示:
          在路面上顯示一個(gè)長(zhǎng)輪胎痕跡

          是一個(gè)長(zhǎng)輪胎痕跡,但在程序中可以使用代碼:car.setTyre_interface_ref(tyre_long_implement);來(lái)對(duì) 輪胎的樣式進(jìn)行不同的替換,可以替換成短輪胎痕跡的汽車輪胎,這樣在不更改Car類的前題下進(jìn)行了不同輪胎樣式的改變,輪胎和輪胎之間可以互相替換,這就 是策略模式。
          主站蜘蛛池模板: 大悟县| 吉水县| 岱山县| 韶山市| 汨罗市| 江西省| 天祝| 辉县市| 靖远县| 清苑县| 大埔县| 交城县| 通许县| 易门县| 天津市| 黄骅市| 阳泉市| 望都县| 黑龙江省| 德化县| 承德市| 广安市| 汨罗市| 高密市| 太仓市| 凤城市| 琼结县| 西峡县| 丽水市| 巴青县| 临邑县| 建平县| 梁平县| 宿迁市| 台南县| 湖南省| 怀安县| 南和县| 黄浦区| 彭泽县| 靖安县|