<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類的前題下進行了不同輪胎樣式的改變,輪胎和輪胎之間可以互相替換,這就 是策略模式。
    主站蜘蛛池模板: 亚洲一区二区三区免费在线观看| 一级做a免费视频观看网站| 免费视频一区二区| 亚洲日韩精品无码一区二区三区| 久久国产精品免费一区| 亚洲国产综合无码一区| 在线观看黄片免费入口不卡| 久久精品国产亚洲综合色| 成人精品一区二区三区不卡免费看| 亚洲日韩国产精品第一页一区| 两个人看www免费视频| 亚洲Av熟妇高潮30p| 免费黄色福利视频| 亚洲欧洲专线一区| 日本特黄特色免费大片| 无码毛片一区二区三区视频免费播放| 免费人成网站在线高清| 国产精品成人69XXX免费视频| 国产亚洲精品无码成人| 久久综合国产乱子伦精品免费| 亚洲天堂中文字幕在线观看| 最近免费中文字幕视频高清在线看| 亚洲av无码专区青青草原| 亚洲综合亚洲综合网成人| 久久久久国产精品免费网站| 亚洲成av人片不卡无码| 国产成人免费片在线观看| 久久一区二区免费播放| 亚洲日本香蕉视频| 国产免费观看青青草原网站| 在线观看免费视频一区| 亚洲日产2021三区| 一本色道久久88综合亚洲精品高清| 最新亚洲成av人免费看| 亚洲制服丝袜中文字幕| 亚洲精品NV久久久久久久久久| 亚洲一区免费在线观看| 免费在线观看亚洲| 亚洲男女一区二区三区| 亚洲人成无码久久电影网站| 麻花传媒剧在线mv免费观看|