1. 回调
1.1 定义接口
public interface NetEvevt {
public void onNetChange(int netMobile);
}
1.2. 实现回调接口
public class MainActivity extends AppCompatActivity implements NetEvevt{
// 定义静态变量
public static NetEvevt evevt;
CustomerReceiver customerReceiver=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 赋值给变量
evevt=this;
if(customerReceiver==null){
customerReceiver=new CustomerReceiver();
IntentFilter filter = new IntentFilter("com.denganzhi.greendao.CustomerReceiver.action");
registerReceiver(customerReceiver, filter);
}
}
// 实现接口,重写方法
@Override
public void onNetChange(int netMobile) {
Toast.makeText(MainActivity.this,"netMobile:"+netMobile,Toast.LENGTH_SHORT).show();
}
public void methodClick(View view){
Intent intent = new Intent("com.denganzhi.greendao.CustomerReceiver.action");
sendBroadcast(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(customerReceiver!=null){
unregisterReceiver(customerReceiver);
customerReceiver=null;
}
}
}
1.3. 广播发送
public class CustomerReceiver extends BroadcastReceiver {
public NetEvevt evevt = MainActivity.evevt;
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
// Toast.makeText(context,"收到",Toast.LENGTH_LONG).show();
// 获取实现方法的类,调用方法
if(evevt!=null){
evevt.onNetChange(110);
}
}
// 自定义接口
// public interface NetEvevt {
// public void onNetChange(int netMobile);
// }
}
观察者模式:
1. 创建 观察者 observer 被观察者observal
2. 观察者加入 被观察者中
3. 被观察者触发,多个观察者更新
案例 :列表页有下载、详情页有下载
2.手动实现观察者模式
1. 定义接口:DownLoad
package com.guanchazhe;
public interface DownLoad {
public void update(int degree);
}
2. 观察者实现接口
观察者1:
package com.guanchazhe;
/*
* 观察者: 下载管理
*/
public class DownLoadManager implements DownLoad{
@Override
public void update(int degree) {
System.out.println("DownLoadManager 下载了:"+degree);
}
}
观察者2:
package com.guanchazhe;
/*
* 观察者: 下载详情页
*/
public class DownLoadDetail implements DownLoad{
@Override
public void update(int degree) {
System.out.println("现在详情页下载了:"+degree);
}
}
3. 观察者注册到被观察者中
调被观察者方法通知观察者
package com.guanchazhe;
import java.util.ArrayList;
import java.util.List;
/*
* 被观察者
*/
public class Myobserval {
List<DownLoad> list= new ArrayList<>();
// 注册观察者,在被观察者中
public void addOberser(DownLoad d){
list.add(d);
}
public void downloadApp(){
// 被观察者中下载
System.out.println("请求网络开始下载了:"+10);
// 通知 观察者
for (DownLoad d : list) {
d.update(10);
}
}
}
4. 调用
package com.guanchazhe;
public class Main {
public static void main(String[] args) {
Myobserval myobserval=new Myobserval();
myobserval.addOberser(new DownLoadDetail());
myobserval.addOberser(new DownLoadManager());
myobserval.downloadApp();
}
}
3. 通过 java.util.Observable 实现观察者模式
package com.tz.observe;
import java.util.Observable;
import java.util.Observer;
// 定义观察者 1
public class MyObserve implements Observer{
@Override
public void update(Observable observable, Object data) {
System.out.println("我是观察者1");
}
}
package com.tz.observe;
import java.util.Observable;
import java.util.Observer;
// 定义观察者2
public class MyObserv1 implements Observer{
@Override
public void update(Observable observable, Object data) {
System.out.println("我是观察者2");
}
}
被观察者 MyByObserve
package com.tz.observe;
import java.util.Observable;
// 被观察者
public class MyByObserve extends Observable{
@Override
public boolean hasChanged() {
// TODO Auto-generated method stub
return true;
}
// 调用被观察者 方法,通知观察者,观察者 update方法 调用
public void say(){
System.out.println("我是被观察者");
this.notifyObservers();
}
}
MainActivity 调用
public class MainActivity extends Activity {
MyByObserve myb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 把观察者加入被观察者的集合中
myb=new MyByObserve();
myb.addObserver(new MyObserve());
myb.addObserver(new MyObserv1());
}
public void getObserve(View view){
// myb.notifyObservers();
// 被观察者方法
myb.say();
}
}