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(); } }
[美国队长]正在移动 [美国队长]发动攻击 ----------复联成立---------- 美国队长加入队伍 钢铁侠加入队伍 绿巨人加入队伍 [美国队长 钢铁侠 绿巨人 ]组成的队伍正在移动 [美国队长 钢铁侠 绿巨人 ]组成的队伍发动攻击 ----------发生矛盾-------- 钢铁侠离开队伍 [美国队长 绿巨人 ]组成的队伍正在移动 [美国队长 绿巨人 ]组成的队伍发动攻击