標籤:des style blog http java color
策略模式,良好的擴充性,將對象分割成2部分,一部分是相同屬性(抽象類別),一部分是專屬的屬性(介面),良好的擴充,自由的組合出需要的新的對象
資料來自網路,例子由自己編寫
例子: 角色和武器 角色都有攻擊力 ,攻擊速度和移動速度 武器有自己專屬的特性 但是角色又擁有武器
定義角色的抽象父類
1 package org.masque.designpatterns.strategy; 2 /** 3 * 4 * Description: 5 * Player.java Create on 2014年7月5日 下午1:39:16 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Reserved. 9 */10 public abstract class Player {11 12 protected int ATK;13 14 protected double ASPD;15 16 protected int speed;17 18 protected Weapon weapon;19 20 public int getATK() {21 return ATK;22 }23 24 public void setATK(int aTK) {25 ATK = aTK;26 }27 28 public double getASPD() {29 return ASPD;30 }31 32 public void setASPD(double aSPD) {33 ASPD = aSPD;34 }35 36 public int getSpeed() {37 return speed;38 }39 40 public void setSpeed(int speed) {41 this.speed = speed;42 }43 44 public Weapon getWeapon() {45 return weapon;46 }47 48 public void setWeapon(Weapon weapon) {49 this.weapon = weapon;50 }51 52 @Override53 public String toString() {54 return "Player [ATK=" + ATK + ", ASPD=" + ASPD + ", speed=" + speed55 + ", weapon=" + weapon + "]";56 }57 }
定義武器的介面:
1 package org.masque.designpatterns.strategy; 2 /** 3 * 4 * Description: 5 * Weapon.java Create on 2014年7月5日 下午1:39:16 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Reserved. 9 */10 public interface Weapon {11 12 public void display();13 }
角色玩家:
1 package org.masque.designpatterns.strategy; 2 /** 3 * 4 * Description: 5 * Player01.java Create on 2014年7月5日 下午1:39:16 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Reserved. 9 */10 public class Player01 extends Player {11 12 public Player01(int ATK,double ASPD,int speed,Weapon weapon){13 this.ATK = ATK;14 this.ASPD = ASPD;15 this.speed = speed;16 this.weapon = weapon;17 }18 }
武器1:
1 package org.masque.designpatterns.strategy; 2 /** 3 * 4 * Description: 5 * Weapon01.java Create on 2014年7月5日 下午1:39:16 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Reserved. 9 */10 public class Weapon01 implements Weapon {11 12 @Override13 public void display() {14 System.out.println("我是武器01");15 }16 17 @Override18 public String toString() {19 display();20 return "Weapon01 []";21 }22 }
武器2:
1 package org.masque.designpatterns.strategy; 2 /** 3 * 4 * Description: 5 * Weapon02.java Create on 2014年7月5日 下午1:39:16 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Reserved. 9 */10 public class Weapon02 implements Weapon {11 12 @Override13 public void display() {14 System.out.println("我是武器02");15 }16 17 @Override18 public String toString() {19 display();20 return "Weapon02 []";21 }22 }
測試類別:
1 package org.masque.designpatterns.strategy; 2 /** 3 * 4 * Description: 5 * MainTest.java Create on 2014年7月5日 下午1:39:16 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Reserved. 9 */10 public class MainTest {11 12 public static void main(String[] args) {13 Player01 player01 = new Player01(50, 0.65, 350, new Weapon01());14 System.out.println(player01);15 16 player01.setWeapon(new Weapon02());17 System.out.println(player01);18 }19 }
player不需要知道Weapon具體的實現細節
java多態,player擁有的武器也能更換