组合模式

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);
		
		
		
		
		
		
		
		
		
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值