当前位置: 首页 > news >正文

从化网站设计牙克石网站建设

从化网站设计,牙克石网站建设,绍兴柯桥区城乡建设局网站,北京市建设工程质量监督站网站时间是一只藏在黑暗中温柔的手#xff0c;在你一出神一恍惚之间#xff0c;物走星移 一#xff0c;定义 观察者模式是定义对象间一种一对多的依赖关系#xff0c;使得每当一个对象改变状态#xff0c;则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解在你一出神一恍惚之间物走星移 一定义 观察者模式是定义对象间一种一对多的依赖关系使得每当一个对象改变状态则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解我们常用的订阅-发布系统就是观察者模式。观察者模式是一个使用率非常高的模式因为这个模式的一个重要作用就是解耦将被观察者和观察者解耦使得它们之间的依赖性更小甚至做到毫无依赖。 二使用场景 1关联行为场景需要注意的是关联行为是可拆分的而不是组合关系 2事件多级触发场景 3跨系统的消息交互场景如消息队列事件总线的处理机制 观察者模式可以分为四个角色 1抽象主题也就是被观察的角色抽象主题角色把所有观察者对象的引用保存在一个集合里每个主题都可以有任意数量的观察者抽象主题提供一个接口可以增加和删除观察者对象。 2具体主题该角色将有关状态存入具体观察者对象在具体主题的内部状态发生改变时给所有注册过的观察者发出通知具体主题角色又叫具体被观察者角色。 3抽象观察者该角色是观察者的抽象类它定义了一个更新接口使得在得到主题的更改通知时更新自己。 4具体的观察者该角色实现抽象观察者角色所定义的更新接口以便在主题的状态发生变化时更新自身的状态。 三使用案例 在我们的开发中都会遇到下载升级的场景需要边下载边显示升级进度还需要在下载完成或者下载失败之后更新状态为正在安装或者下载失败可能有的应用需要显示进度的页面还不止一个这个时候使用观察者模式就再好不过了。 首先我们需要定义一个观察者抽象接口实现两个方法 /** 创建者: 袁震* 创建时间: 2023/7/25 10:37* 描述 观察者接口*/public interface DownLoadObserver {//下载状态发生变化public void onDownloadStateChanged(boolean isSuccess,String path);//下载进度发生变化public void onDownloadProgressChanged(int progress);} 然后实现一个下载管理器这个下载管理器实际上就是被观察者里面注册了观察者实现了下载功能并在下载进度和状态改变时通知观察者 /** 创建者: 袁震* 创建时间: 2023/7/25 10:34* 描述 下载管理器 被观察者*/ public class DownloadManager {private static final String TAG DownloadManager;private int errorCount 0;//下载失败次数// 私有的构造函数private DownloadManager() {}// 私有的静态内部类private static class Holder {private static DownloadManager instance new DownloadManager();}// 开放的获取单例对象的方法public static DownloadManager getInstance() {return DownloadManager.Holder.instance;}private ArrayListDownLoadObserver mObservers new ArrayListDownLoadObserver();//注册观察者public void registerObserver(DownLoadObserver observer){if(observer! null !mObservers.contains(observer)){Log.d(TAG,----添加observer);mObservers.add(observer);}}//注销观察者public void unregisterObserver(DownLoadObserver observer){if(observer! null mObservers.contains(observer)){mObservers.remove(observer);}}// 通知下载状态发生变化public synchronized void notifyDownloadStateChanged(boolean isSuccess,String path) {for (DownLoadObserver observer : mObservers) {observer.onDownloadStateChanged(isSuccess,path);}}// 通知下载进度发生变化public synchronized void notifyDownloadProgressChanged(int progress) {for (DownLoadObserver observer : mObservers) {observer.onDownloadProgressChanged(progress);}}public void downLoadApk(String fileUrl,String name){//调用线程池中的线程A10ThreadExecutor.getExecutorService(A10ThreadExecutor.HANDLE_MODULE).execute(() - {String rootDir /sdcard/Update_APK/;Log.d(TAG, 下载路径为 rootDir);Utils.delAllFile(rootDir);OmniHttp.downLoad(fileUrl).savePath(rootDir).saveName(name).execute(new DownloadProgressCallBackString() {Overridepublic void update(long bytesRead, long contentLength, boolean done) {notifyDownloadProgressChanged((int) ((bytesRead * 100)/contentLength));}Overridepublic void onStart() {}Overridepublic void onComplete(String path) {notifyDownloadStateChanged(true,path);Log.d(TAG, -------下载成功path path);}Overridepublic void onError(final ApiException e) {errorCount;errMethod(fileUrl,name,errorCount);Log.e(TAG, ----下载失败 e.getMessage()--失败次数errorCount);}});});}} 在实际使用中 /** 创建者: 袁震* 创建时间: 2023/7/24 14:14* 描述 升级页面*/ RequirePresenter(UpdatePresenter.class) public class UpdateActivity extends BaseActivityUpdatePresenter implements UpdateContract.IUpdateView, DownLoadObserver {private static final String TAG UpdateActivity;public static final String UPDATE_DATE UPDATE_DATE;private ProgressBar pb;private TextView txtProgress;private TextView txtContent;Overridepublic int getLayoutId() {return R.layout.activity_update;}Overridepublic void initFields() {pb findViewById(R.id.progressBar);txtProgress findViewById(R.id.txt_progress);txtContent findViewById(R.id.txt_content);//注册观察者DownloadManager.getInstance().registerObserver(this);}Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String stringExtra getIntent().getStringExtra(UPDATE_DATE);bean GsonUtils.json2Bean(stringExtra, UpdatePackageBean.class);}Overridepublic void onDownloadStateChanged(boolean isSuccess,String path) {Log.d(TAG,下载状态改变:isSuccess);}Overridepublic void onDownloadProgressChanged(int progress) {runOnUiThread(()-{txtProgress.setVisibility(View.VISIBLE);txtContent.setText(正在下载新的安装程序请不要关机或断电);txtProgress.setText(progress%);pb.setProgress(progress);});}Overrideprotected void onDestroy() {super.onDestroy();//注销观察者DownloadManager.getInstance().unregisterObserver(this);}} 这样就通过观察者模式实现了UI和业务逻辑的解耦已经实时更新问题。 四总结 观察者模式在实际开发中应用面非常广泛它的主要作用就是对象解耦将观察者和被观察者完全隔离只依赖与Observer和Observable抽象。 优点 1观察者和被观察者之间是抽象耦合应对业务变化 2增加系统灵活性可扩展性。 缺点 程序中包括一个被观察者多个观察者开发和调试等内容会比较复杂在java中消息的通知默认是 顺序执行一个观察者卡顿会影响整体的执行效率在这种情况下一般考虑采用 异步的方式。 参考文献Android源码设计模式第二版
文章转载自:
http://www.morning.qkrqt.cn.gov.cn.qkrqt.cn
http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn
http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn
http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn
http://www.morning.plqqp.cn.gov.cn.plqqp.cn
http://www.morning.frsbf.cn.gov.cn.frsbf.cn
http://www.morning.sthp.cn.gov.cn.sthp.cn
http://www.morning.mxlmn.cn.gov.cn.mxlmn.cn
http://www.morning.i-bins.com.gov.cn.i-bins.com
http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn
http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn
http://www.morning.gmswp.cn.gov.cn.gmswp.cn
http://www.morning.nxdqz.cn.gov.cn.nxdqz.cn
http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn
http://www.morning.mnlk.cn.gov.cn.mnlk.cn
http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn
http://www.morning.zwtp.cn.gov.cn.zwtp.cn
http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn
http://www.morning.bkryb.cn.gov.cn.bkryb.cn
http://www.morning.nyqb.cn.gov.cn.nyqb.cn
http://www.morning.rdlong.com.gov.cn.rdlong.com
http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn
http://www.morning.drmbh.cn.gov.cn.drmbh.cn
http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn
http://www.morning.jprrh.cn.gov.cn.jprrh.cn
http://www.morning.zttjs.cn.gov.cn.zttjs.cn
http://www.morning.pclgj.cn.gov.cn.pclgj.cn
http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn
http://www.morning.dygqq.cn.gov.cn.dygqq.cn
http://www.morning.jppdk.cn.gov.cn.jppdk.cn
http://www.morning.dnmwl.cn.gov.cn.dnmwl.cn
http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn
http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn
http://www.morning.frnjm.cn.gov.cn.frnjm.cn
http://www.morning.dzpnl.cn.gov.cn.dzpnl.cn
http://www.morning.hjssh.cn.gov.cn.hjssh.cn
http://www.morning.wmdqc.com.gov.cn.wmdqc.com
http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn
http://www.morning.nyplp.cn.gov.cn.nyplp.cn
http://www.morning.hmqmm.cn.gov.cn.hmqmm.cn
http://www.morning.jbztm.cn.gov.cn.jbztm.cn
http://www.morning.bzgpj.cn.gov.cn.bzgpj.cn
http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn
http://www.morning.qtxwb.cn.gov.cn.qtxwb.cn
http://www.morning.czzpm.cn.gov.cn.czzpm.cn
http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn
http://www.morning.fwmln.cn.gov.cn.fwmln.cn
http://www.morning.zwndt.cn.gov.cn.zwndt.cn
http://www.morning.yuminfo.com.gov.cn.yuminfo.com
http://www.morning.krgjc.cn.gov.cn.krgjc.cn
http://www.morning.yuminfo.com.gov.cn.yuminfo.com
http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn
http://www.morning.pshpx.cn.gov.cn.pshpx.cn
http://www.morning.yfrlk.cn.gov.cn.yfrlk.cn
http://www.morning.jtnph.cn.gov.cn.jtnph.cn
http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn
http://www.morning.rdlrm.cn.gov.cn.rdlrm.cn
http://www.morning.hwcgg.cn.gov.cn.hwcgg.cn
http://www.morning.fxxmj.cn.gov.cn.fxxmj.cn
http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn
http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn
http://www.morning.htbgz.cn.gov.cn.htbgz.cn
http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn
http://www.morning.pqwrg.cn.gov.cn.pqwrg.cn
http://www.morning.lzqtn.cn.gov.cn.lzqtn.cn
http://www.morning.ffmx.cn.gov.cn.ffmx.cn
http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn
http://www.morning.zmqb.cn.gov.cn.zmqb.cn
http://www.morning.tpnch.cn.gov.cn.tpnch.cn
http://www.morning.xgbq.cn.gov.cn.xgbq.cn
http://www.morning.rbrd.cn.gov.cn.rbrd.cn
http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn
http://www.morning.kjfsd.cn.gov.cn.kjfsd.cn
http://www.morning.skkln.cn.gov.cn.skkln.cn
http://www.morning.dcccl.cn.gov.cn.dcccl.cn
http://www.morning.pswqx.cn.gov.cn.pswqx.cn
http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn
http://www.morning.rflcy.cn.gov.cn.rflcy.cn
http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn
http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn
http://www.tj-hxxt.cn/news/247799.html

相关文章:

  • 北京金创网站建设运营一个网站一年费用
  • 旅游网站开发盈利模式WordPress手机横屏显示
  • 推荐手机网站建设泰州网站建设设计
  • 潍坊哪里可以做网站wordpress语言插件
  • 网站欢迎页面在线设计江西省城乡住房建设厅网站
  • 现在建设网站落后了dw软件免费下载
  • 最便宜的视频网站建设南宁企业网站seo
  • 太原手机网站设计小程序代理加盟有哪些大品牌
  • 中国建设网官方网站证书查询南通市区有哪几家做网站的
  • 陕煤建设集团韩城分公司网站开发公司分公司如何办预售证
  • 外贸网站建站平台汕头网站建设方案推广
  • 广州做网站开发seo推广培训课程
  • 手机上做整蛊网站大型电商平台有哪些
  • 魏县住房和城乡建设局网站上海暂停娱乐场所营业通知
  • 在线解压zip网站昆明网站推广咨询平台
  • 网站界面设计材料收集保定建设工程信息网
  • 北京市建设网站首页咖啡的网站建设策划书
  • 做网站的前端是做什么wordpress网站多语言
  • p2p网站开发维护百度导航2023年最新版
  • 酒店网站怎么做域名交易网站建设
  • 国内亲子游做的最好的网站品牌推广方案策划书
  • c 做网站怎么截取前面的字符飓风seo刷排名软件
  • wordpress 网站加密插件线上推广产品
  • 靖江做网站中企动力做网站要全款
  • 网站开发一般用什么开发语言南昌做网站开发的公司有哪些
  • 网站服务器租用协议赵阳竞价培训
  • 银川市建设工程质量监督站网站昆明网络营销公司哪家好
  • 做网站订金是多少wordpress管理员地址
  • 施秉网站建设平面设计培训班哪里有
  • 知名网站建设商家做网站彩票代理犯法吗