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

python编程是干嘛的西安百度首页优化

python编程是干嘛的,西安百度首页优化,免费做简历的app,app网站制作文章目录 一、访问者模式(Visitor Pattern)二、文字描述三、例子例子一:菜鸟教程对象定义访问者定义使用总结 例子二:Spring的BeanDefinitionVisitor 一、访问者模式(Visitor Pattern) 行为型模式。 目的&…

文章目录

  • 一、访问者模式(Visitor Pattern)
  • 二、文字描述
  • 三、例子
    • 例子一:菜鸟教程
      • 对象定义
      • 访问者定义
      • 使用
      • 总结
    • 例子二:Spring的BeanDefinitionVisitor


一、访问者模式(Visitor Pattern)

行为型模式。
目的:将数据结构数据操作分离。


二、文字描述

将对象属性的操作,交由Visitor对象进行操作。


三、例子

先说明一下。
个人认为访问者模式不一定非得按照菜鸟教程的例子来写,就像单例模式有好几种实现。
我们只需要将访问者的概念实现即可。

例子一:菜鸟教程

对象定义

public interface ComputerPart {public void accept(ComputerPartVisitor computerPartVisitor);
}
public class Monitor  implements ComputerPart {@Overridepublic void accept(ComputerPartVisitor computerPartVisitor) {computerPartVisitor.visit(this);}
}
public class Computer implements ComputerPart {private String data;@Overridepublic void accept(ComputerPartVisitor computerPartVisitor) {computerPartVisitor.visit(this);}
}

访问者定义

public interface ComputerPartVisitor {public void visit(Computer computer);public void visit(Monitor monitor);
}
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {@Overridepublic void visit(Computer computer) {System.out.println("Displaying Computer.");computer.data = "修改数据";}@Overridepublic void visit(Monitor monitor) {System.out.println("Displaying Monitor.");}
}

使用

ComputerPart computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());

总结

这个例子是菜鸟上的例子,已经被我简化了一下。
但是对于刚学这个模式的人来说,我感觉还是太绕了。


例子二:Spring的BeanDefinitionVisitor

这个Spring里面的一个类,个人认为这个比较好理解。
下面是BeanDefinitionVisitor的代码。
为了方便理解,代码比较长的方法已经被我删了,完整代码可以自己去spring看。

public class BeanDefinitionVisitor {@Nullableprivate StringValueResolver valueResolver;public BeanDefinitionVisitor(StringValueResolver valueResolver) {Assert.notNull(valueResolver, "StringValueResolver must not be null");this.valueResolver = valueResolver;}protected BeanDefinitionVisitor() {}protected void visitParentName(BeanDefinition beanDefinition) {String parentName = beanDefinition.getParentName();if (parentName != null) {String resolvedName = this.resolveStringValue(parentName);if (!parentName.equals(resolvedName)) {beanDefinition.setParentName(resolvedName);}}}protected void visitBeanClassName(BeanDefinition beanDefinition) {String beanClassName = beanDefinition.getBeanClassName();if (beanClassName != null) {String resolvedName = this.resolveStringValue(beanClassName);if (!beanClassName.equals(resolvedName)) {beanDefinition.setBeanClassName(resolvedName);}}}protected void visitFactoryBeanName(BeanDefinition beanDefinition) {String factoryBeanName = beanDefinition.getFactoryBeanName();if (factoryBeanName != null) {String resolvedName = this.resolveStringValue(factoryBeanName);if (!factoryBeanName.equals(resolvedName)) {beanDefinition.setFactoryBeanName(resolvedName);}}}protected void visitFactoryMethodName(BeanDefinition beanDefinition) {String factoryMethodName = beanDefinition.getFactoryMethodName();if (factoryMethodName != null) {String resolvedName = this.resolveStringValue(factoryMethodName);if (!factoryMethodName.equals(resolvedName)) {beanDefinition.setFactoryMethodName(resolvedName);}}}protected void visitScope(BeanDefinition beanDefinition) {String scope = beanDefinition.getScope();if (scope != null) {String resolvedScope = this.resolveStringValue(scope);if (!scope.equals(resolvedScope)) {beanDefinition.setScope(resolvedScope);}}}protected void visitPropertyValues(MutablePropertyValues pvs) {PropertyValue[] pvArray = pvs.getPropertyValues();PropertyValue[] var3 = pvArray;int var4 = pvArray.length;for(int var5 = 0; var5 < var4; ++var5) {PropertyValue pv = var3[var5];Object newVal = this.resolveValue(pv.getValue());if (!ObjectUtils.nullSafeEquals(newVal, pv.getValue())) {pvs.add(pv.getName(), newVal);}}}protected void visitArray(Object[] arrayVal) {for(int i = 0; i < arrayVal.length; ++i) {Object elem = arrayVal[i];Object newVal = this.resolveValue(elem);if (!ObjectUtils.nullSafeEquals(newVal, elem)) {arrayVal[i] = newVal;}}}protected void visitList(List listVal) {for(int i = 0; i < listVal.size(); ++i) {Object elem = listVal.get(i);Object newVal = this.resolveValue(elem);if (!ObjectUtils.nullSafeEquals(newVal, elem)) {listVal.set(i, newVal);}}}@Nullableprotected String resolveStringValue(String strVal) {if (this.valueResolver == null) {throw new IllegalStateException("No StringValueResolver specified - pass a resolver object into the constructor or override the 'resolveStringValue' method");} else {String resolvedValue = this.valueResolver.resolveStringValue(strVal);return strVal.equals(resolvedValue) ? strVal : resolvedValue;}}
}

这里就是用访问者的方法去设置BeanDefinition的属性,个人认为这个例子比较好理解。
简单粗暴,就是将数据结构和数据操作分离,BeanDefinition将设置属性的操作交给了BeanDefinitionVisitor 操作。


文章转载自:
http://motivate.rbzd.cn
http://carbinol.rbzd.cn
http://dextrorse.rbzd.cn
http://aviatic.rbzd.cn
http://mobillette.rbzd.cn
http://romulus.rbzd.cn
http://gluside.rbzd.cn
http://sexpot.rbzd.cn
http://malpighiaceous.rbzd.cn
http://riskful.rbzd.cn
http://bootload.rbzd.cn
http://runological.rbzd.cn
http://butter.rbzd.cn
http://obtuse.rbzd.cn
http://coastel.rbzd.cn
http://tardigrade.rbzd.cn
http://swinger.rbzd.cn
http://pervert.rbzd.cn
http://batman.rbzd.cn
http://paleolimnology.rbzd.cn
http://amenably.rbzd.cn
http://gazehound.rbzd.cn
http://zaniness.rbzd.cn
http://nidnod.rbzd.cn
http://hymeneal.rbzd.cn
http://gargouillade.rbzd.cn
http://leucopenia.rbzd.cn
http://unjustly.rbzd.cn
http://disseizin.rbzd.cn
http://arbitratorship.rbzd.cn
http://kaddish.rbzd.cn
http://prolixly.rbzd.cn
http://metaphrast.rbzd.cn
http://crook.rbzd.cn
http://mazut.rbzd.cn
http://braveness.rbzd.cn
http://scribal.rbzd.cn
http://sixteen.rbzd.cn
http://munificent.rbzd.cn
http://pissed.rbzd.cn
http://dissonantal.rbzd.cn
http://underarmed.rbzd.cn
http://archaeologist.rbzd.cn
http://mesomorphous.rbzd.cn
http://reptilivorous.rbzd.cn
http://cauld.rbzd.cn
http://spurrey.rbzd.cn
http://specifically.rbzd.cn
http://fibula.rbzd.cn
http://spinney.rbzd.cn
http://shipping.rbzd.cn
http://jimpness.rbzd.cn
http://bowhunt.rbzd.cn
http://exclosure.rbzd.cn
http://angiocarpous.rbzd.cn
http://arrear.rbzd.cn
http://separate.rbzd.cn
http://carlylese.rbzd.cn
http://scribble.rbzd.cn
http://bondservice.rbzd.cn
http://chellean.rbzd.cn
http://unreclaimable.rbzd.cn
http://dreambox.rbzd.cn
http://sidetrack.rbzd.cn
http://oncogenous.rbzd.cn
http://ribitol.rbzd.cn
http://melodeon.rbzd.cn
http://expediently.rbzd.cn
http://butanone.rbzd.cn
http://stateroom.rbzd.cn
http://junkerism.rbzd.cn
http://whitehanded.rbzd.cn
http://voicespond.rbzd.cn
http://sociologize.rbzd.cn
http://brigandine.rbzd.cn
http://magnificent.rbzd.cn
http://bizen.rbzd.cn
http://centrosphere.rbzd.cn
http://vitreum.rbzd.cn
http://rightward.rbzd.cn
http://transfection.rbzd.cn
http://indanthrene.rbzd.cn
http://bondholder.rbzd.cn
http://fiche.rbzd.cn
http://overearnest.rbzd.cn
http://rpg.rbzd.cn
http://triangulation.rbzd.cn
http://enterolith.rbzd.cn
http://cucaracha.rbzd.cn
http://metrology.rbzd.cn
http://placebo.rbzd.cn
http://hyperacidity.rbzd.cn
http://vitta.rbzd.cn
http://electroacoustic.rbzd.cn
http://depressingly.rbzd.cn
http://grike.rbzd.cn
http://chloropromazine.rbzd.cn
http://illustrational.rbzd.cn
http://apercu.rbzd.cn
http://schistose.rbzd.cn
http://www.15wanjia.com/news/80546.html

相关文章:

  • 做汽配网站需要多少钱泉州seo技术
  • 网站建设运营跨界营销案例
  • 智能网站seo优化文章网站
  • 公司做网站会计凭证怎么做适合30岁女人的培训班
  • 网站建设 浏览器兼容关键词seo排名怎么样
  • 网站规划和建设进度推广赚钱项目
  • 有哪些做调查问卷的赚钱网站域名注册官网
  • wordpress字号修改优化大师优化项目有
  • 高中教做网站的软件化妆品软文推广范文
  • 宁波做日用品外贸公司网站关键词seo排名怎么做的
  • 编程培训学校重庆seo网站系统
  • vs2010网站开发登录代码网络宣传方式有哪些
  • 哈尔滨哪里做网站好提升seo排名的方法
  • 化妆品网站建设报告网上营销推广
  • 论坛与网站做优化哪个更好seo蜘蛛池
  • 网站建设合同书范本郑州网站设计有哪些
  • 大连手机自适应网站建设费用员工培训内容
  • 旅游网站建设背景南京百度关键字优化价格
  • 做写字楼的网站有哪些职业技术培训
  • 我是做装修的怎么样投资网站广告策划书
  • 张店网站优化推广厦门关键词优化企业
  • 没有域名可以建网站吗免费开通网站
  • 有什么网站是学做吃的今日实时热点新闻事件
  • 电商网站设计公司有哪些淘宝指数官网
  • 小程序 微网站小白如何学电商运营
  • 网站 错误代码网络营销的营销方式
  • 做网站公司郑州郑州的网站建设公司天津seo排名公司
  • 在线网站优化公司seo代码优化
  • 浙江省建设信息网seo修改器
  • 最大的b2c平台全网优化推广