package 组合模式;
import java.util.ArrayList;
// 球员的共性
public abstract class IPlayer {
public int effect;
public String name;
public ArrayList<IPlayer> playerArray = new ArrayList<IPlayer>();
public IPlayer(int effect,String name){
this.effect = effect;
this.name = name;
}
// 球员信息
public void info(){
System.out.println(this.name+"--> 进军NBA.....影响力指数->"+this.effect);
}
// 添加球员
public void addPlayer(IPlayer player){
this.playerArray.add(player);
}
// 获取所有球员
public void getAllPlayer(ArrayList<IPlayer> players){
// this.info();
if(players != null && players.size() > 0){
for(int i = 0; i<players.size(); i++){
IPlayer player = players.get(i);
if(player instanceof Middle){
Middle middle = (Middle)player;
middle.info();
this.getAllPlayer(middle.playerArray);
}else{
Last last = (Last)player;
last.info();
}
}
}
}
}
package 组合模式;
public class Boss extends IPlayer{
public Boss(int effect, String name) {
super(effect, name);
}
}
package 组合模式;
public class Middle extends IPlayer{
public Middle(int effect, String name) {
super(effect, name);
}
}
package 组合模式;
public class Last extends IPlayer{
public Last(int effect, String name) {
super(effect, name);
}
}
package 组合模式;
/**
* 组合模式主要针对的就是一种树形结构化的业务, 也就是一种从上到下的一种模式,这种模式就相当与XML和树形等一种业务规律。
*
*
* 模拟: 姚明NBA, (按影响力进行树形结构处理)
* 大致 易建联
* 巴特尔 孙越 王泽林
*
*
* 树形结构的形式, 那么节点的形式应该是差不多的, 所以有共性, 可以抽取出来,作为一个公共的抽象类。如此的话,那么他们的方法也是差不多的
* 所以,可以继续对方法进行抽取到抽象类中处理。统一节点都可以处理相同的事情。 我们甚至可以把球员, boss,middle,last 继续抽取一个公共
* 基类,然后在写一个类来进行基础,这样就不要编写3个代码相同的类了。 ---这样分开写,对于一些业务来说,可能更加清晰, 这只是一个Demo。
*
*
* 不能以形式的名称来熟悉设计模式, 而是要熟悉这个业务处理的时候,需要的更好的理解和用抽象,接口这样的方式。
* 组合模式感觉就是一种嵌套的模式来处理, 嵌套的形式就是一个集合的问题。 目标是熟悉分析需求,采取什么手段来处理。
*
* */
public class Main {
public static void main(String[] args) {
IPlayer boss = new Boss(100,"姚明"); // 根目录
IPlayer middle_A = new Middle(80,"大致");
IPlayer middle_B = new Middle(80,"易建联");
boss.addPlayer(middle_A);
boss.addPlayer(middle_B);// 第二目录
IPlayer last_A = new Last(60,"巴特尔");
middle_A.addPlayer(last_A); // 第三目录
IPlayer last_B_A = new Last(60,"孙悦"); // 第三目录
IPlayer last_B_B = new Last(60,"王哲林");
middle_B.addPlayer(last_B_A);
middle_B.addPlayer(last_B_B);
// 查看所有排行版 ---查看树形结构
boss.info();
boss.getAllPlayer(boss.playerArray);
}
}