android 观察者模式解析

本文深入探讨了观察者模式的原理与优点,通过代码示例展示了如何在Java中实现观察者模式,包括被观察者类(Observable)与观察者类(Observer)的设计与交互,以及如何使用管理类(AddObserver)进行观察者的添加与删除。同时,文章演示了如何在实际场景中应用观察者模式,确保代码的高内聚性和低耦合性。

观察者模式的优点好处:可以降低代码的耦合度,维护更方便,相对于广播和Intent来说!

观察者模式首先需要知道两个重要的类:Observer类和Observable类,Observable是被观察者类,Observer是观察者类,

他们之前如何实现交互通信传值呢?

package com.myboserver;

import java.util.Observable;

public class Myobseverble extends Observable{
	private String name;
	private float price;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
		setChanged();
		notifyObservers(name);
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
		setChanged();
		notifyObservers(price);
	}
	
}
上面是被观察着类,继承Observable类,然后在需要天机数据和数据需要传值的地方调用setchanged方法来启动观察着,并向观察者传值notifyObservers();



//观察着
public class MyobserverB implements Observer{


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public void update(Observable observable, Object data) {
<span style="white-space:pre">		</span>if (data instanceof Float) {
<span style="white-space:pre">			</span>float price=((Float) data).floatValue();
<span style="white-space:pre">			</span>Log.i("MyobserverB", "启动的观察者,值为="+price);
<span style="white-space:pre">		</span>}




<span style="white-space:pre">	</span>}


}

public class MyboserverA implements Observer{

	@Override
	public void update(Observable observable, Object data) {
		if (data instanceof String) {
			Log.i("MyboserverA", "启动的观察者,值为="+data);
		}
		
	} 

}
上面是观察着类,调用接口Observer类,重写update方法,方法中有两个参数,其中Object可以获取notifyObservers(name);传的值,由于是Objectt类型的,所以需要用instanceof进行类型判断,获取到值之后,随你处置,


package com.myboserver;
//管理观察着模式
public class AddObserver {
	private Myobseverble myobseverble;
	public void setobserble(Myobseverble myobseverble){
		this.myobseverble=myobseverble;
	}
	public void add(MyboserverA a,MyobserverB b){
		myobseverble.addObserver(a);
		myobseverble.addObserver(b);
	}
	public void delete(MyboserverA a){
		myobseverble.deleteObserver(a);
	}
	public void delete(MyobserverB b){
		myobseverble.deleteObserver(b);
	}
}
上面是观察着模式的管理类,主要是添加观察着和删除观察着,首先调用被观察者类后实例化,然后在add方法中调用addObserver()方法添加观察者,参数为
MyboserverA implements Observer
MyobserverB implements Observer
删除也是一样的,

最后是调用和使用观察者模式,

package com.myboserver;

public class TextClass {
	public  static void text(){
		Myobseverble myobseverble=new Myobseverble();
		MyboserverA a=new MyboserverA();
		MyobserverB b=new MyobserverB();
		AddObserver addObserver=new AddObserver();
		addObserver.setobserble(myobseverble);实例化被观察着
		addObserver.add(a, b);添加
		myobseverble.setName("玉米");启动观察者
		myobseverble.setPrice(3.5f);
	}

}

最有打印应该为:
	Log.i("MyboserverA", "启动的观察者,值为="+玉米);
	Log.i("MyobserverB", "启动的观察者,值为="+3.5);


所有代码都在此,

要想向高手进阶设计模式必须要熟练的使用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值