<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇一角

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

    策略模式

    Posted on 2009-01-20 17:27 非洲小白臉 閱讀(203) 評論(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類的前題下進行了不同輪胎樣式的改變,輪胎和輪胎之間可以互相替換,這就 是策略模式。
    主站蜘蛛池模板: 亚洲一区在线观看视频| 特级毛片免费观看视频| 午夜男人一级毛片免费| www一区二区www免费| 亚洲国产精品婷婷久久| 夫妻免费无码V看片| 免费看一区二区三区四区| 亚洲综合久久一本伊伊区| 亚洲国产黄在线观看| 亚洲日本在线免费观看| 免费国产草莓视频在线观看黄| 久久精品国产亚洲av麻| 日本免费一区尤物| 91在线手机精品免费观看| 麻豆亚洲AV成人无码久久精品| 久久精品7亚洲午夜a| 国产免费观看网站| 亚洲视频在线免费播放| 国产免费内射又粗又爽密桃视频 | 亚洲午夜日韩高清一区| 99久久精品日本一区二区免费| 日韩精品视频在线观看免费| 亚洲国产高清在线精品一区| 在线播放亚洲第一字幕| 日韩中文无码有码免费视频| 91在线手机精品免费观看| WWW免费视频在线观看播放| 亚洲欧美国产国产一区二区三区| 亚洲韩国—中文字幕| 久久精品国产精品亚洲| 午夜网站免费版在线观看| 人与禽交免费网站视频| 国产婷婷成人久久Av免费高清 | 特a级免费高清黄色片| 亚洲精品免费网站| 久久亚洲精品人成综合网| 国产AV无码专区亚洲A∨毛片| 亚洲&#228;v永久无码精品天堂久久| 亚洲一区二区三区免费观看| 99视频在线看观免费| a毛片免费在线观看|