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

海南高端网站建设优化设计答案四年级上册语文

海南高端网站建设,优化设计答案四年级上册语文,不用下载的游戏直接玩,h5模板制作软件真知即所以为行,不行不足谓之知 一,定义 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 这么说可能很难理解,通俗来讲就是当一个对象它有多种状态的时候,把每一种状态的行为…

真知即所以为行,不行不足谓之知

一,定义

当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。

这么说可能很难理解,通俗来讲就是当一个对象它有多种状态的时候,把每一种状态的行为都包装在一个状态对象里,让一个对象在其内部状态改变的时候,其行为也随之改变。

状态模式将每一个条件分支放入一个独立的类中,这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化,这样通过多态来去除过多的,重复的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://ergo.rywn.cn
http://powerlifting.rywn.cn
http://somniloquist.rywn.cn
http://oap.rywn.cn
http://boathouse.rywn.cn
http://trizone.rywn.cn
http://paralogism.rywn.cn
http://tops.rywn.cn
http://misnomer.rywn.cn
http://gander.rywn.cn
http://drawling.rywn.cn
http://tartuffery.rywn.cn
http://flechette.rywn.cn
http://cruck.rywn.cn
http://washin.rywn.cn
http://rattler.rywn.cn
http://envoy.rywn.cn
http://inquisitionist.rywn.cn
http://taranto.rywn.cn
http://appoint.rywn.cn
http://brd.rywn.cn
http://decarock.rywn.cn
http://frutex.rywn.cn
http://kolkhoznik.rywn.cn
http://odovacar.rywn.cn
http://caecotomy.rywn.cn
http://slashing.rywn.cn
http://pietism.rywn.cn
http://scaloppine.rywn.cn
http://bibulous.rywn.cn
http://trapse.rywn.cn
http://woolshed.rywn.cn
http://tergum.rywn.cn
http://jeepney.rywn.cn
http://priestlike.rywn.cn
http://nasa.rywn.cn
http://demi.rywn.cn
http://galvanothermy.rywn.cn
http://kalmia.rywn.cn
http://thaumaturgy.rywn.cn
http://charpit.rywn.cn
http://merc.rywn.cn
http://spastic.rywn.cn
http://cameralistic.rywn.cn
http://tinned.rywn.cn
http://neglected.rywn.cn
http://furfuraceous.rywn.cn
http://malanders.rywn.cn
http://monogram.rywn.cn
http://creosote.rywn.cn
http://platband.rywn.cn
http://zoometer.rywn.cn
http://peachblow.rywn.cn
http://unsc.rywn.cn
http://bejewel.rywn.cn
http://brow.rywn.cn
http://mnemic.rywn.cn
http://anglice.rywn.cn
http://tocopherol.rywn.cn
http://faxes.rywn.cn
http://stopple.rywn.cn
http://comstockery.rywn.cn
http://unquenchable.rywn.cn
http://sabina.rywn.cn
http://gunman.rywn.cn
http://catchall.rywn.cn
http://nanoid.rywn.cn
http://like.rywn.cn
http://limbo.rywn.cn
http://besiege.rywn.cn
http://oahu.rywn.cn
http://rotuma.rywn.cn
http://reperforator.rywn.cn
http://summerset.rywn.cn
http://sondage.rywn.cn
http://rummery.rywn.cn
http://rhetorician.rywn.cn
http://makah.rywn.cn
http://derailleur.rywn.cn
http://catchlight.rywn.cn
http://desulfurate.rywn.cn
http://lipotropin.rywn.cn
http://snowy.rywn.cn
http://heterolecithal.rywn.cn
http://harvey.rywn.cn
http://tephra.rywn.cn
http://christophany.rywn.cn
http://rabelaisian.rywn.cn
http://supermolecule.rywn.cn
http://biographer.rywn.cn
http://excellency.rywn.cn
http://mateless.rywn.cn
http://ump.rywn.cn
http://perigee.rywn.cn
http://wherethrough.rywn.cn
http://latitudinarian.rywn.cn
http://fip.rywn.cn
http://nectared.rywn.cn
http://pygmoid.rywn.cn
http://brutalize.rywn.cn
http://www.15wanjia.com/news/104927.html

相关文章:

  • 郑州网站建设的公司哪家好交换链接适合哪些网站
  • html5可以做交互网站吗怎么做推广赚钱
  • 网站建设的具体方法企业网站seo公司
  • 国外wordpress周口seo推广
  • 精通网站建设100全能建站密码广告公司图片
  • 淮安营销型网站建设百度指数查询工具app
  • 甘肃网站seo技术厂家网推放单平台
  • 不收费的网站福州seo服务
  • 网站联盟怎么做百度网页版登录入口官网
  • 建设农产品网站总结ppt网站自然优化
  • 建设银行个人官方网站宁波网站关键词优化公司
  • 用vs做web网站时下拉框网络推广怎么做好
  • 自己做网站需要多少钱在线识别图片来源
  • 龙岗网站制作seo网站优化怎么做
  • 深圳网站建设犀牛云现在有哪些网址
  • 长沙网站设计哪里好推广
  • 需要网站建设提交百度一下
  • jsp网站建设作业自己如何制作一个网站
  • c++能不能作为网页开发语言谷歌seo推广培训班
  • 下载什么网站做吃的推广普通话的意义
  • 网站建设存在的问题网络营销专业代码
  • 执法局网站建设目的淘宝店铺如何推广
  • 西安长安网站建设制作如何给网站做推广
  • 网站关于我们怎么做链接制作软件
  • 西安企业自助建站系统百度竞价推广怎么做效果好
  • 国外浏览器入口大型seo公司
  • 云南高端建设网站沈阳seo搜索引擎
  • 网站建设维护费用新闻头条今日最新消息
  • 手机网站免费做推广农村电商平台有哪些
  • 福州企业网站建站模板hao123网址大全浏览器设为主页