国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java設計模式——策略模式(Strategy Pattern)

2019-11-14 23:26:24
字體:
來源:轉載
供稿:網友
java設計模式——策略模式(Strategy Pattern)

策略模式:定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。

先不管定義是如何,讓我們先來看一個例子。假設你要設計一個游戲里的人物(包括玩家、NPC),如何進行設計呢?我們知道,一個游戲人物肯定有基本屬性、動作(如血量的屬性、行走的動作),能夠拿不同的武器,能夠換不同的裝備......如何進行彈性的設計。在這里,我們就可以使用策略模式。

設計原則1:找出應用之中可能變化之處,把它們獨立出來,不要和那些不要變化的代碼混在一起在這里,我們可以看到游戲人物可以拿不同的武器, 能夠換不同的裝備,屬于變化的部分,可以獨立出來;行走的動作等屬于不變的部分,可以不需獨立出來,可以先實現為一個類。

基本人物代碼:

public class GamePerson{    PRivate int bloodValue;    public GamePerson(int value){        this.bloodValue=value;    }    public int getBloodValue(){        return bloodValue;    }        private void move(){        System.out.println("I'm moving");    }}    

  

現在我們考慮的是如何實現裝備、武器等的實現,使其能夠具有彈性,在游戲時動態改變。所以,就需要設計原則2:針對接口編程,而不是針對實現編程。利用接口表示每個行為,比如EquipmentInterface,WeaponInterface.我們不用GamePerson實現這兩個接口,而是自己創建具體的裝備類、武器類實現各自的接口。如:ClothingEquipment,WristEquipment,SWordWeapton,GunWeapton.

具體代碼如下:

裝備接口:

public interface EquipmentInterface{    void equipment();}

衣服裝備:

public class ClothingEquipment implement EquipmentInterface{    public void equipment(){         Systemout.out.println("I'm clothing");           }  }

手腕裝備

public class WristEquipment implement EquipmentInterface{    public void equipment(){         Systemout.out.println("I'm wrist");           }  }

武器接口

public interface WeaptonInterface{      void weapton();  }

刀劍武器

public class SwordWeapton implement WeaptonInterface{     void weapton(){        System.out.println("I'm sword");    }  }

槍武器

public class GunWeapton implement WeaptonInterface{     void weapton(){        System.out.println("I'm gun");    }  }

好,最后我們就需要將這兩個組合在一起了。具體的說,需要在游戲人物中加入WeaptonInterface與EquipmentInterface。如下:

public class GamePerson{    private int bloodValue;    WeaptonInterface weapton;   EquipmentInterfac equipment;
    public void setWeapton(WeaptonInterface w){        this.weapton = w;    }
    public void setEquipment(EquipmentInterface w){        this.equipment = w;    }
    public GamePerson(int value,WeaptonInterface w,EquipmentInterface e){        this.bloodValue=value;     this.weapton = w;     this.equipment =e;    }    public int getBloodValue(){        return bloodValue;    }        private void move(){        System.out.println("I'm moving");    }} 

所以,具體的人物類可以繼承GamePerson,如:

public class NPCPerson extends GamePerson{    public void NPCPerson(int b,WeaptonInterface w,EquipmentInterface e){      super(b,w,e);          }      }

測試一下:

public class TestApp{    public static void main(String[] args){        NPCPerson p = new NPCPerson(100,new SwordWeapton(),new WristWeapton());        p.move();        p.setWeapton(new GunWeapton());     }}

在最后需要記住設計原則3:多用組合,少用繼承


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平舆县| 宜川县| 洛扎县| 池州市| 杭州市| 民勤县| 六安市| 章丘市| 三穗县| 孝昌县| 黄浦区| 崇州市| 洱源县| 渝中区| 和田县| 沈丘县| 凉城县| 长宁县| 慈利县| 诏安县| 图片| 汉寿县| 新兴县| 贵南县| 伊春市| 惠安县| 恩平市| 高陵县| 元阳县| 巴中市| 舒城县| 岳西县| 乌兰浩特市| 无锡市| 晋城| 高要市| 江油市| 兴海县| 北京市| 本溪| 周至县|