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

山东定制型网站建设推广上传的网站打不开

山东定制型网站建设推广,上传的网站打不开,增改文章发布区功能wordpress,wordpress html5 模板下载前言Android的设计模式系列文章介绍#xff0c;欢迎关注#xff0c;持续更新中#xff1a;1.定义给定一门语言#xff0c;定义它的文法的一种表示#xff0c;并定义一个解释器#xff0c;该解释器使用该表示来解释语言中的句子。2.介绍解释器模式属于行为型模式。解释器模…前言Android的设计模式系列文章介绍欢迎关注持续更新中1.定义给定一门语言定义它的文法的一种表示并定义一个解释器该解释器使用该表示来解释语言中的句子。2.介绍解释器模式属于行为型模式。解释器模式提供了一种解释语言的语法或表达式的方式。解释器模式实际开发中很少用到。3.UML类图解释器模式UML类图.jpg角色说明AbstractExpression(抽象表达式)定义一个抽象的解释方法其具体的实现在各个具体的子类解释器中完成。TerminalExpression(终结符表达式)实现对文法中与终结符有关的解释操作。NonterminalExpression(非终结符表达式)实现对文法中的非终结符有关的解释操作。Context(环境角色)包含解释器之外的全部信息。Client(客户端角色)解析表达式构建抽象语法树执行具体的解释操作等。4.实现以加减法的实现为例我们实现下面表达式的解释并输出结果为了方便解释在表达式中介加了空格方便处理。a 1024b 512a ba - b4.1 创建抽象表达式public abstract class ArithmeticExpression {//抽象算术表达式public abstract Object interpret(Context context);//抽象解释方法}4.2 终结符表达式从上面的表达式可以看出终结符有两种一种是数字另外一种是变量。//数字表达式用来解释数字public class NumExpression extends ArithmeticExpression {private String strNum;public NumExpression(String strNum) {this.strNum strNum;}Overridepublic Integer interpret(Context context) {//解释数字return Integer.parseInt(strNum);}}//变量表达式用来解释变量class VarExpression extends ArithmeticExpression {private String var;public VarExpression(String var) {this.var var;}Overridepublic String interpret(Context context) {//解释变量return var;}}4.3 创建非终结符表达式上面的表达式有三种非终结符分别是号、-号和号。//加法表达式用来解释加法,如abpublic class AddExpression extends ArithmeticExpression {private ArithmeticExpression left, right;//加号左右两边的内容public AddExpression(ArithmeticExpression left, ArithmeticExpression right) {this.left left;this.right right;}Overridepublic Integer interpret(Context context) {//解释加法表达式的结果即算出leftright的结果return context.get((String) left.interpret(context)) context.get((String) right.interpret(context));}}//减法表达式用来解释减法,如a-bpublic class SubExpression extends ArithmeticExpression {private ArithmeticExpression left, right;//减号左右两边的内容public SubExpression(ArithmeticExpression left, ArithmeticExpression right) {this.left left;this.right right;}Overridepublic Integer interpret(Context context) {//解释减法表达式的结果即算出left-right的结果return context.get((String) left.interpret(context)) - context.get((String) right.interpret(context));}}//等号表达式用来解释变量赋值如a1024public class EqualExpression extends ArithmeticExpression {private ArithmeticExpression left, right;//等号左右两边的内容public EqualExpression(ArithmeticExpression left, ArithmeticExpression right) {this.left left;this.right right;}Overridepublic Object interpret(Context context) {//解释等号表达式的结果并将结果保存到context变量名为key,值为valuecontext.put((String) left.interpret(context), (int) right.interpret(context));return null;}}4.4 创建环境角色创建环境主要包含解释器之外的全部信息这里用来保存变量以及其值。public class Context {Map mMap new HashMap();//使用HashMap来保存结果public void put(String key, int value) {mMap.put(key, value);}public int get(String key) {return (int) mMap.get(key);}}4.5 创建客户端角色客户端角色主要负责解析表达式构建抽象语法树执行具体的解释操作等。public class Calculator {//计算器类Context mContext new Context();private ArithmeticExpression mExpression;public void read(String expression) {//读取表达式String[] split expression.split( );//表达式以空格隔开方便拆分switch (split[1]) {//根据不同符号去执行具体的解析操作case :new EqualExpression(new VarExpression(split[0]), new NumExpression(split[2])).interpret(mContext);break;case :mExpression new AddExpression(new VarExpression(split[0]), new VarExpression(split[2]));break;case -:mExpression new SubExpression(new VarExpression(split[0]), new VarExpression(split[2]));break;}}public int calculate() {//计算结果return (int) mExpression.interpret(mContext);}}4.6 客户端测试public void test() {Calculator calculator new Calculator();calculator.read(a 1024);//读取表达式calculator.read(b 512);System.out.println(a 1024);System.out.println(b 512);calculator.read(a b);System.out.println(a b calculator.calculate());//计算结果calculator.read(a - b);System.out.println(a - b calculator.calculate());}输出结果a 1024b 512a b 1536a - b 5125. 应用场景简单的语法需要解释时如解释一个sql语句。一些重复发生的问题比如加减乘除四则运算但是公式每次都不同有时是ab-cd有时是abc-d等公式千变万化但是都是由加减乘除四个非终结符来连接的这时我们就可以使用解释器模式。6. 优点灵活的扩展性想扩展语法规则时只需新增新的解释器就可以了。如上面的例子中想增加乘除法只想增加相应的解释类并增加相应的表达式解释操作即可。7. 缺点每一个文法都至少对应一个解释器会产生大量的类难于维护。解释器模式由于大量使用循环和递归需要考虑效率的问题而且调试也不方便。对于复杂的文法构建其抽象语法树会显得异常繁琐。所以不推荐在重要的模块中使用解释器模式维护困难。8. Android中的源码分析对于AndroidManifest.xml这个文件我们是相当熟悉。实际上AndroidManifest.xml是由PackageManagerService使用了PackageParser这个类来解释的这里面就用到了解释器模式。对于AndroidManifest.xml中的每一个标签都有对应的类去保存相应的信息。8.1 PackageParser的parseBaseApkCommon方法基于Android 27的源码不同版本的源码方法名可能不一样。private Package parseBaseApkCommon(Package pkg, Set acceptedTags, Resources res,XmlResourceParser parser, int flags, String[] outError)throws XmlPullParserException, IOException {//其他代码略if (tagName.equals(TAG_APPLICATION)) {//其他代码略if (!parseBaseApplication(pkg, res, parser, flags, outError)) {//解释application标签return null;}} else if (tagName.equals(TAG_OVERLAY)) {//其他代码略} else if (tagName.equals(TAG_KEY_SETS)) {if (!parseKeySets(pkg, res, parser, outError)) {return null;}} else if (tagName.equals(TAG_PERMISSION_GROUP)) {if (!parsePermissionGroup(pkg, flags, res, parser, outError)) {return null;}} else if (tagName.equals(TAG_PERMISSION)) {if (!parsePermission(pkg, res, parser, outError)) {return null;}} else if (tagName.equals(TAG_PERMISSION_TREE)) {if (!parsePermissionTree(pkg, res, parser, outError)) {return null;}} else if (tagName.equals(TAG_USES_PERMISSION)) {if (!parseUsesPermission(pkg, res, parser)) {return null;}} else if (tagName.equals(TAG_USES_PERMISSION_SDK_M)|| tagName.equals(TAG_USES_PERMISSION_SDK_23)) {if (!parseUsesPermission(pkg, res, parser)) {return null;}} else if (tagName.equals(TAG_USES_CONFIGURATION)) {//其他代码略} else if (tagName.equals(TAG_USES_FEATURE)) {//其他代码略} else if (tagName.equals(TAG_FEATURE_GROUP)) {//其他代码略} else if (tagName.equals(TAG_USES_SDK)) {//其他代码略} else if (tagName.equals(TAG_SUPPORT_SCREENS)) {//其他代码略} else if (tagName.equals(TAG_PROTECTED_BROADCAST)) {//其他代码略} else if (tagName.equals(TAG_INSTRUMENTATION)) {//其他代码略} else if (tagName.equals(TAG_ORIGINAL_PACKAGE)) {//其他代码略} else if (tagName.equals(TAG_ADOPT_PERMISSIONS)) {//其他代码略} else if (tagName.equals(TAG_USES_GL_TEXTURE)) {//其他代码略} else if (tagName.equals(TAG_COMPATIBLE_SCREENS)) {//其他代码略} else if (tagName.equals(TAG_SUPPORTS_INPUT)) {////其他代码略} else if (tagName.equals(TAG_EAT_COMMENT)) {//其他代码略} else if (tagName.equals(TAG_PACKAGE)) {//其他代码略} else if (tagName.equals(TAG_RESTRICT_UPDATE)) {//其他代码略} else if (RIGID_PARSER) {//其他代码略} else {//其他代码略}}从上面代码可以看到就是对各个标签的内容进行解释。我们再来看看parseBaseApplication这个方法这个是对Application进行解释。8.2 parseBaseApplication方法private boolean parseBaseApplication(Package owner, Resources res,XmlResourceParser parser, int flags, String[] outError)throws XmlPullParserException, IOException {//其他代码略String tagName parser.getName();if (tagName.equals(activity)) {//解释activityActivity a parseActivity(owner, res, parser, flags, outError, cachedArgs, false,owner.baseHardwareAccelerated);//其他代码略} else if (tagName.equals(receiver)) {//解释receiverActivity a parseActivity(owner, res, parser, flags, outError, cachedArgs,true, false);//其他代码略} else if (tagName.equals(service)) {//解释serviceService s parseService(owner, res, parser, flags, outError, cachedArgs);//其他代码略} else if (tagName.equals(provider)) {//解释providerProvider p parseProvider(owner, res, parser, flags, outError, cachedArgs);//其他代码略} else if (tagName.equals(activity-alias)) {Activity a parseActivityAlias(owner, res, parser, flags, outError, cachedArgs);//其他代码略} else if (parser.getName().equals(meta-data)) {//其他代码略} else if (tagName.equals(static-library)) {//其他代码略} else if (tagName.equals(library)) {//其他代码略} else if (tagName.equals(uses-static-library)) {if (!parseUsesStaticLibrary(owner, res, parser, outError)) {return false;}} else if (tagName.equals(uses-library)) {//其他代码略} else if (tagName.equals(uses-package)) {//其他代码略} else {//其他代码略}//其他代码略return true;}可以看到上面有对activity、receiver、service等标签的解释activity的具体解释在parseActivity这个方法里面有兴趣的可以自行去看下这里就不细说了同时可以看到receiver也是在parseActivity这个方法中解释。
http://www.zqtcl.cn/news/393342/

相关文章:

  • 做中英文网站多少钱方维制网站
  • 做一个信息发布网站要多少钱开发小程序多少钱一个
  • 山东网站设计网站关键词设置技巧
  • 做网站服务怎么赚钱产品展示型的网站功能有哪些
  • 丹东网站制作宁波网站建设公司制作网站
  • 南宁建设工程质量网站九江网站建设九江
  • 永州市住房和城乡建设厅网站服务器可以做几个网站
  • 哪里学网站建设与管理做移动端电影网站
  • 境外企业网站推广大冶市建设局网站
  • 户网站建设的不全.阿里巴巴国际站
  • 定制手机壳的网站能在家做的兼职的网站
  • 温州营销型网站建设郴州网络推广公司
  • asp.net 做网站源代码网站怎么做配置文件夹
  • 网站建设云尚网络wordpress首页flash
  • 北京优化网站宁波网络营销策划公司
  • 网站建设项目前分析电商运营一般要学多久
  • 哪个网站可以做卖房网站菜单模板
  • 网站推广渠道特点郑州百度推广外包
  • 合肥高端网站建设设计公司wordpress 多语言主题
  • 北京工程工程建设交易信息网站wordpress 角色 功能
  • 做购物网站有什么要求吗wordpress查看访问量
  • 多城市网站设计阿里云网站访问不了怎么办
  • 南岗哈尔滨网站建设开发小程序多少费用
  • 百度网站入口特效词品牌企业网站建设公司
  • wordpress找回管理员密码网站关键词排名优化工具
  • 望城建设局网站网站建设与维护可行性报告
  • 免费php网站模板下载手机端网站如何优化
  • 自己做的网站 打开了没有图片注册工程公司名称大全
  • 做网站的团队业绩怎么写WordPress 去掉副标题
  • 学校网页网站模板wordpress更换域名还是之前链接