观察者模式
来源:互联网 发布:淘宝c店变成企业店铺 编辑:程序博客网 时间:2024/06/09 17:33
1、新建观察者接口Observer
public interface Observer { void update(String msg);}
2、新建被观察者接口Subject
public interface Subject { void attact(Observer observer);//观察者订阅 void detact(Observer observer);//解除订阅 void notify(String msg);//被观察者发布消息}
3、新建员工类实现观察者接口
public class Employee implements Observer{ private String username; public Employee(String username) { this.username = username; } @Override public void update(String msg) { Log.w("msg",username+" 收到老板的信息:"+msg); }}
4、新建老板类实现被观察者接口
public class Boss implements Subject{ private List<Observer>observers; public Boss() { observers=new ArrayList<>(); } //订阅消息 @Override public void attact(Observer observer) { observers.add(observer); } //解除订阅 @Override public void detact(Observer observer) { for (int i=0;i<observers.size();i++){ if (observer.equals(observers.get(i))) observers.remove(i); } } //发布消息 @Override public void notify(String msg) { for (int i=0;i<observers.size();i++){ observers.get(i).update(msg); } }}
5、在MainActivity中调用
public class MainActivity extends AppCompatActivity { private Employee em_1,em_2,em_3; private Boss boss; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.btn); //实例化员工 em_1=new Employee("刘炜"); em_2=new Employee("王嘉翔"); em_3=new Employee("沈锐彬"); //实例化老板 boss=new Boss(); //员工订阅老板消息 boss.attact(em_1); boss.attact(em_2); boss.attact(em_3); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //老板发消息 boss.notify("明天加班"); Log.i("msg","--------------分割线-------------"); //王嘉翔解除订阅 boss.detact(em_2); //老板再发消息 boss.notify("后天放假"); } }); }}
6、运行结果:
7、源码链接:
https://github.com/Hasagit/ObserverDemo.git
阅读全文
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- JAVA导入Excel文件
- 多任务学习(Multi-Task Learning, MTL)
- Python采集网页时正则表达式匹配换行符的问题
- Java 里如何实现线程间通信
- Unity优化杂谈3(资源)
- 观察者模式
- 远程安装linux环境的mysql
- ios审核4.3被拒? 别担心 这几步让你的 App 顺利过审!
- spring的自动扫描里面的include-filter,exclude-filter
- 关于重载(overload)、覆盖(shadow)、覆写(override)的区别
- C语言基本语句
- 17 个新手常见 Python 运行时错误
- openstack网络(neutron)模式之GRE的基本原理
- Vehicle