观察者模式

package 观察者模式;


/*
 * 
 *    观察者模式, 理解就是一个状态的改变, 监视他的人就会给出不同的反应和业务反应。 如此说来,可以确定的一点, 
 *    
 *    观察者和被观察者之间会在一个类中,通过接口或者属性的形式在一个类中。  然后做出的反应,最好的也就是一个接口回调,具体的处理交给
 *    
 *    实现的子类来处理。 
 *    
 *    
 *    模拟场景: ----->   
 *    
 *             易建联 奥运会精彩比赛。  NBA球探在看, CBA球探在看, 国内球迷在看。 然后三个给出不同的反应。 
 * 
 * 
 * **/


public class Main {

	public static void main(String[] args) {
		 
		IPlayer  player = new YJLPlayer("易建联");
		
		ICrowd  nba = new NBAScout();
		ICrowd  cba = new CBAScout();
		ICrowd  fan = new Fan();
		
		player.addObserver(nba);
		player.addObserver(cba);
		player.addObserver(fan);
		
		
		// 触发事件 --------不同的观察者不同的业务处理。 
		player.baoKou();
		
		System.out.println("===============================================");
		
		player.shoot();
		
		

	}

}



package 观察者模式;

import java.util.ArrayList;

// 被观察者 
public abstract class IPlayer {
	
	private ArrayList<ICrowd> list = new ArrayList<ICrowd>();
	
	private String name;
	
	public IPlayer(String name){
		
		this.name = name;
	}
	
	// 暴扣
	public void  baoKou(){
		
		 System.out.println(this.name + "--->太空易挥起来了");
		 for(int i = 0; i<list.size(); i++){
			 
			     list.get(i).dosomethingsByBaokou();
		 }
		
	}
	
	// 3分 
    public void  shoot(){
    	
    	    System.out.println(this.name + "--->3分绝杀啊");
    	
    	    for(int i = 0; i<list.size(); i++){
   			 
			     list.get(i).dosomethingsByShoot();
		 }
    }
	
    // 添加观察者 
    public  void  addObserver(ICrowd crowd){
    	     this.list.add(crowd);
    }
	

}


package 观察者模式;

public class YJLPlayer extends IPlayer {

	public YJLPlayer(String name) {
		super(name);
		 
	}

}


 

package 观察者模式;


// 观察者反应 

public abstract class ICrowd {
	 
	public abstract  void  dosomethingsByBaokou();
	
	public abstract  void  dosomethingsByShoot();

}

package 观察者模式;

public class NBAScout extends ICrowd {

	@Override
	public void dosomethingsByBaokou() {
		 
		 System.out.println("NBA: 身体素质好,可以在来NBA");
        
	}

	@Override
	public void dosomethingsByShoot() {
		
		 System.out.println("NBA:  赶快来NBA签合同啊,签起来");
	}

}

package 观察者模式;

public class CBAScout extends ICrowd {

	@Override
	public void dosomethingsByBaokou() {
		 System.out.println("CBA:  这身体素质,还是很给力的");

	}

	@Override
	public void dosomethingsByShoot() {
		 System.out.println("CBA: 大心脏啊");

	}

}

package 观察者模式;

public class Fan extends ICrowd {

	@Override
	public void dosomethingsByBaokou() {
		 
         System.out.println("球迷:  牛逼啊, 阿联!");
	}

	@Override
	public void dosomethingsByShoot() {
		 System.out.println("球迷:  漂亮, 阿联!");
	}

}

允许结果:

易建联--->太空易挥起来了

NBA: 身体素质好,可以在来NBA

CBA:  这身体素质,还是很给力的

球迷:  牛逼啊, 阿联!

===============================================

易建联--->3分绝杀啊

NBA:  赶快来NBA签合同啊,签起来

CBA: 大心脏啊

球迷:  漂亮, 阿联!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值