`
3213213333332132
  • 浏览: 78659 次
社区版块
存档分类
最新评论

java观察者模式

阅读更多
观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。

在日常中,我们配java环境变量时,设置一个JAVAHOME变量,这就是被观察者,使用了JAVAHOME变量的对象都是观察者,一旦JAVAHOME的路径改动,其他的也会跟着改动。

这样的例子很多,我想用小时候玩的老鹰捉小鸡游戏来简单的描绘观察者模式。

老鹰会变成观察者,母鸡和小鸡是观察者,一旦老鹰的动作发生变动,观察者们也会跟着发生变化

package 观察者模式;

/**
 * 老鹰(被观察者)
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-6下午04:56:29
 */
public class Eagle {
    /**
     * 动作 
     */
    public static String action;

    private String name;
    
    public Eagle(String name){
    	this.name = name;
    }
    
    public void move(){
    	System.out.println(this.name + action);
    }
    
}


package 观察者模式;

/**
 * 母鸡(观察者)
 * @Description
 * @author FuJianyong
 * 2015-7-6下午04:57:50
 */
public class Hen {
	
	private String name;
	
	public Hen(String name){
		this.name = name;
	}
	
	public void move() {
		if(Eagle.action.equals("飞走了")){
			System.out.println(this.name + "呱呱叫");			
		}else{
		    System.out.println(this.name + Eagle.action);
		}
	}  
}



package 观察者模式;

/**
 * 小鸡
 * @Description
 * @author FuJianyong
 * 2015-7-6下午05:00:25
 */
public class Chick{

	private String name;
	
	public Chick(String name) {
		this.name = name;
		
	}
	public void move(){
		if(Eagle.action.equals("飞走了")){
			System.out.println(this.name + "唧唧叫");			
		}else{
		    System.out.println(this.name + Eagle.action);
		}
	}
}



测试代码:
package 观察者模式;

import java.util.Random;

/**
 * @Description 测试
 * @author FuJianyong
 * 2015-7-6下午04:56:04
 */
public class mainTest {
    private static final String[] actions = {"向左移动一步", "向左移动两步", "向左移动三步", 
    	"向右移动一步", "向右移动两步", "向右移动三步", "飞走了"};
    
    public static void main(String[] args) {
    	Eagle eagle = new Eagle("老鹰");
    	Hen hen = new Hen("母鸡");
    	Chick chick = new Chick("小鸡");
    	Random random = new Random();
    	int ran;
    	for(int i=0;i<10;i++){
    		ran = random.nextInt(actions.length);
    		Eagle.action = actions[ran];
			eagle.move();
			hen.move();
			chick.move();
    	}

	}

}



运行结果:

老鹰向左移动三步
母鸡向左移动三步
小鸡向左移动三步
老鹰向左移动一步
母鸡向左移动一步
小鸡向左移动一步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向右移动三步
母鸡向右移动三步
小鸡向右移动三步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向左移动两步
母鸡向左移动两步
小鸡向左移动两步
老鹰向左移动三步
母鸡向左移动三步
小鸡向左移动三步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向右移动一步
母鸡向右移动一步
小鸡向右移动一步
4
2
分享到:
评论
4 楼 3213213333332132 2015-07-12  
哈哈,,,不要酱紫。。。
3 楼 xlaohe1 2015-07-10  
无言以对
          
2 楼 fly_down 2015-07-10  
神实现+1!
1 楼 sdzxx2008 2015-07-09  
神实现!

相关推荐

Global site tag (gtag.js) - Google Analytics