package designpattern.composite; public abstract class Target { private String name;// 名稱 public abstract void add(Target target);// 增長節點 public abstract void remove(Target target);// 刪除節點 public abstract void move();// 移動 public abstract void attack();// 攻擊 public String getName() { return name; } public void setName(String name) { this.name = name; } }
package designpattern.composite; public class Player extends Target { private String name; public Player(String name) { super(); this.name = name; } @Override public void move() { System.out.println("[" + name + "]正在移動"); } @Override public void attack() { System.out.println("[" + name + "]發動攻擊"); } @Override public void add(Target target) { } @Override public void remove(Target target) { } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Player [name=" + name + "]"; } }
package designpattern.composite; import java.util.ArrayList; import java.util.List; public class Team extends Target { List<Target> team = new ArrayList<>(); @Override public void add(Target target) { team.add(target); System.out.println(target.getName() + "加入隊伍"); } @Override public void remove(Target target) { team.remove(target); System.out.println(target.getName() + "離開隊伍"); } @Override public void move() { System.out.println(teamMembers() + "組成的隊伍正在移動"); } @Override public void attack() { System.out.println(teamMembers() + "組成的隊伍發動攻擊"); } private String teamMembers() { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("["); for (Target target : team) { stringBuffer.append(target.getName() + " "); } stringBuffer.append("]"); return stringBuffer.toString(); } }
package designpattern.composite; public class Client { public static void main(String[] args) { Player captainAmerica = new Player("美國隊長"); captainAmerica.move(); captainAmerica.attack(); System.out.println("----------復聯成立----------"); Player ironMan = new Player("鋼鐵俠"); Player hulk = new Player("綠巨人"); Team team = new Team(); team.add(captainAmerica); team.add(ironMan); team.add(hulk); team.move(); team.attack(); System.out.println("----------發生矛盾--------"); team.remove(ironMan); team.move(); team.attack(); } }
[美國隊長]正在移動 [美國隊長]發動攻擊 ----------復聯成立---------- 美國隊長加入隊伍 鋼鐵俠加入隊伍 綠巨人加入隊伍 [美國隊長 鋼鐵俠 綠巨人 ]組成的隊伍正在移動 [美國隊長 鋼鐵俠 綠巨人 ]組成的隊伍發動攻擊 ----------發生矛盾-------- 鋼鐵俠離開隊伍 [美國隊長 綠巨人 ]組成的隊伍正在移動 [美國隊長 綠巨人 ]組成的隊伍發動攻擊