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

甘肃省网站建设_网站建设公司_网站制作_seo优化

微信小程序怎么收费标准,长沙seo网站,小程序商城图片素材,如何识别html5网站真知即所以为行#xff0c;不行不足谓之知 一#xff0c;定义 当一个对象的内在状态改变时#xff0c;允许改变其行为#xff0c;这个对象看起来像是改变了其类。 这么说可能很难理解#xff0c;通俗来讲就是当一个对象它有多种状态的时候#xff0c;把每一种状态的行为…真知即所以为行不行不足谓之知 一定义 当一个对象的内在状态改变时允许改变其行为这个对象看起来像是改变了其类。 这么说可能很难理解通俗来讲就是当一个对象它有多种状态的时候把每一种状态的行为都包装在一个状态对象里让一个对象在其内部状态改变的时候其行为也随之改变。 状态模式将每一个条件分支放入一个独立的类中这使得你可以根据对象自身的情况将对象的状态作为一个对象这一对象可以不依赖于其他对象而独立变化这样通过多态来去除过多的重复的if-else等分支语句。 二使用场景 1一个对象的行为取决于它的状态并且它必须在运行时根据状态改变它的行为。 2代码中包含大量与对象状态有关的条件语句。 三使用案例 假设我们的app有一种特殊场景有离线模式和在线模式离线模式下会进行一系列的操作比如加载缓存等在线模式下会进行一系列的操作比如请求网络等。 假如我们不使用状态模式通常代码是下面这样的 public class WorkEvent {private boolean isNet;public WorkEvent(boolean isNet) {this.isNet isNet;}public void doWork(){if(isNet){System.out.println(----请求服务器);System.out.println(----加载网络页面);}else {System.out.println(----读取本地缓存);System.out.println(----加载缓存页面);}} } 使用时 //---------------连网----------- ConfigManger.getEtnConfigRepository().saveNetState(true);//存到sp里网络状态 WorkEvent workEvent new WorkEvent(true); workEvent.doWork(); //----------------断网--------------- ConfigManger.getEtnConfigRepository().saveNetState(false);//存到sp里网络状态 WorkEvent workEvent new WorkEvent(false); workEvent.doWork(); 这样做不仅需要在内存中存储网络状态还要在处理类中增加各种if-else判断逻辑看起来比较混乱。 接下来我们使用状态模式看看。 首先新建一个网络状态接口 public interface NetState {/*** 处理逻辑* */void dowork();/*** 获取当前网络状态* */boolean getNetState(); } 然后创建具体的网络状态类实现网络状态接口 public class OnLineState implements NetState{Overridepublic void dowork() {System.out.println(----请求服务器);System.out.println(----加载网络页面);}Overridepublic boolean getNetState() {return true;} } public class OffLineState implements NetState{Overridepublic void dowork() {System.out.println(----读取本地缓存);System.out.println(----加载缓存页面);}Overridepublic boolean getNetState() {return false;} } 然后实现单例模式的网络状态上下文类要注意不要持有Activity引用避免内存泄漏问题 public class NetStateContext {private NetStateContext() {}// 私有的静态内部类private static class Holder {private static NetStateContext instance new NetStateContext();}// 开放的获取单例对象的方法public static NetStateContext getInstance() {return NetStateContext.Holder.instance;}private NetState netState new OnLineState();//默认在线public void setNetState(NetState netState) {this.netState netState;this.netState.dowork();}public boolean getNetState(){return netState.getNetState();} }具体使用 //-------在线---- NetStateContext.getInstance().setNetState(new OnLineState()); System.out.println(当前在线状态NetStateContext.getInstance().getNetState()); //-------离线---- NetStateContext.getInstance().setNetState(new OffLineState()); System.out.println(当前在线状态NetStateContext.getInstance().getNetState()); 输出 这样代码就看起来清晰多了而且状态的管理也不用去开辟内存存储了。在实际开发中状态模式的使用对我来说还是比较多的。 四总结 状态模式的关键点在于不同的状态下对于同一行为有不同的响应这其实就是一个将if-else替换的具体示例。当然并不是任何出现if-else的地方都应该通过状态模式重构。一定要结合实际的场景来综合评估。 优点状态模式将所有与一个特定的状态相关的行为都放入一个状态对象中它提供了一个更好的方法来组织与特定状态相关的代码将繁琐的状态判断转换成结构清晰的状态类族在避免代码膨胀的同时也保证了可扩展性与可维护性。 缺点状态模式的使用必然会增加类和对象的个数。 参考文献Android源码设计模式与解析第二版
http://www.ihoyoo.com/news/79349.html

相关文章:

  • 有哪些做共享充电宝的网站施工企业组织机构框架图
  • 网页游戏网站哪个好网站推广seo系统
  • 江苏纬信网站建设最新热搜榜
  • 天猫店买卖网站哪个网站用帝国cms做的
  • 建云购网站吗建设工程信息网 重庆
  • 网站建设办法wordpress镜像什么意思
  • 优秀的网站举例哪学网页设计
  • 网站快照长期不更新网站建设咨询有客诚信网站建设咨询
  • 马格南摄影网站织梦网站去除技术支持
  • 我们的优势的网站企业网站建设设置那些栏目
  • 宠物用品销售网站建设和技术现状网站的建设费用预算策划书
  • 教育网站制作定制兰州市网站建设公司
  • 郴州市住房和城乡建设局网站制作微信小程序软件
  • 网站建设 公众号橙色网站logo 配色
  • wap网站软件郑州高端定制网站
  • 做1688网站到哪里找图片网站建设企业 熊账号
  • 企业网站定制多少钱网站开发设计招聘
  • 自己做的网页怎么上传网站wordpress10款音乐插件
  • 建手机网站济宁专业网站建设
  • 网站制作公司兴田德润实力强wordpress 显示空白
  • 网站seo关键词布局公司注册网址怎么注册
  • 怎么做网站注册名密码门户网站建设单位资质要求
  • 政务网站建设情况汇报网站制作方案包含哪些内容
  • wordpress移动到回收站时发生错误.品牌内容包括哪些
  • 企业网站一定要从建立网站开始南京 seo 价格
  • 网站备案 核验单网上注册公司在哪办
  • 芜湖市建设路小学网站外贸网站怎么做优化
  • 做外贸仿牌网站百度云
  • asp网站显示建设中网站所有二级目录
  • 中国建设企业协会网站首页WordPress上传ssl证书