设计模式学习之观察者模式

设计模式之观察者模式

生活:最近弄了台准系统游戏本,第一次接触准系统这个概念。说白就是品牌机的私生子,都是一个妈生的。然后私生子一般性价比都比原配的好。但私生子始终是私生子,是不会被品牌商认可的,没保修滴,要修只能到卖家那。哥屌丝一个,买电脑只能是想以最低的价格买好的电脑了。保修之类的,I dont care。最后,入手的本本不错,甚是喜欢。回归正题。

意图:当一个对象状态发生改变时,让依赖它的所有对象得到通知。

其实当你编程有一定能力看到这句话,你闭着眼都能把观察者模式写出来了。所谓设计模式不就是前人遇到问题解决方案的一个总结?

举例:我们玩游戏时,角色升级后,一般都会看都到屏幕有一个提示,用来告诉玩家,你的角色升级了(准备好money换装备没?亲)。不废话,下面我实现一个效果,角色升级后,宠物便会跳个舞。

代码

先定义观察者接口

public interface LevelObserver  {

	public  void update() ;
	
}

然后抽象被观察者

public abstract class Observered {
	
	private List<LevelObserver> list=new ArrayList<LevelObserver>();
	
	
	
	
	public void notice()
	{
		for(LevelObserver observer :list)
		{
			observer.update();
		}
	}
	
	
	
	public List<LevelObserver> getList() {
		return list;
	}
	public void setList(List<LevelObserver> list) {
		this.list = list;
	}
	public void addLevelObserver(LevelObserver ob)
	{
		list.add(ob);
	}
	
	public void removeLevelObserver(LevelObserver ob)
	{
		list.remove(ob);
	}
	

}

看过一些别人的代码,好像一般都是抽象类实现主要逻辑。这里也是实现通知被观察者的逻辑。


然后便是宠物对象实现观察者接口

public class Monster implements LevelObserver{
	
	private String name ;
	
	public Monster(String name) {
		// TODO Auto-generated constructor stub
	
		this.name=name;
	}
		
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println(name+"兴奋的跳起舞来");
	}

}

接着,被观察者的具体实现

public class Role extends Observered{
	
	private int level;
	private String  name;
		
	public Role(String name) {
		// TODO Auto-generated constructor stub
		this.name=name;
	}
	
	public void uplevel()
	{
		this.level++;
		System.out.println(this.name+"等级提升1");
		notice();
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}
好了,最后丢到主线程执行

public class Main {

	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Role role=new Role("小明");
		
		Monster monster=new Monster("巨兽");
		
		role.addLevelObserver(monster);
		
		
		role.uplevel();
		

	}

}

执行结果

小明等级提升1
巨兽兴奋的跳起舞来


就这样,一个简单的观察者模式完成。

题外话:这段时间主要是学习设计模式,先不说会用,起码会写先。工作后,感觉基础才是重要的,其他一些神马框架神马语言,不过是个工具。内在的东西才是硬道理。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值