96SEO 2026-02-19 10:18 0
spring中BeanDefinitionVisitor1.6

jdk中ServletContextListener2.5.2
spring中ContextLoaderListener2.6
Pattern】,是一种将数据结构与数据操作分离设计模式。
是指
KPI的考核标准一般是固定不变的但参与KPI考核的员工会经常变化。
餐厅吃饭餐厅的菜单是基本稳定的就餐人员基本每天都在变化。
就餐人员就是一个访问者。
访问者好像就是变化的元素与不变的结构【标准规则】的构成关系处理角色。
com.oldlu.visitor.demo.kpi;import
com.oldlu.visitor.demo.kpi;import
{visitor.visit(this);}//考核代码量public
com.oldlu.visitor.demo.kpi;import
{visitor.visit(this);}//考核每年的新产品研发数量public
com.oldlu.visitor.demo.kpi;/***
com.oldlu.visitor.demo.kpi;/***
{System.out.println(工程师engineer.getName()
,KPIengineer.getKpi());}Overridepublic
{System.out.println(项目经理manager.getName()
com.oldlu.visitor.demo.kpi;/***
{System.out.println(工程师engineer.getName()
,编写代码行数engineer.getCodingLine());}Overridepublic
{System.out.println(项目经理manager.getName()
com.oldlu.visitor.demo.kpi;import
Manager(项目经理A));employeeList.add(new
Manager(项目经理B));employeeList.add(new
Engineer(程序员A));employeeList.add(new
Engineer(程序员B));employeeList.add(new
com.oldlu.visitor.demo.kpi;/***
BusinessReport();System.out.println(CEO看报表);report.showReport(new
CEOVisitor());System.out.println(CTO看报表);report.showReport(new
访问者顶层接口定义时内部会定义visit重载方法针对不同的访问元素实现子类进行重载。
当系统需要增加元素实现子类时只需要增加一个实现子类该接口中增加一个重载方法。
Java中分派是方法重载的一种特殊形式。
即重载方法方法名相同参数个数相同类型不同的形式。
com.oldlu.visitor.dispatch;/***
Main();main.test(integer);main.test(str);}public
integer){System.out.println(Integer
上面测试代码中test方法存在两个重载方法参数个数相同类型不同
在程序编译阶段不能明确是哪种类型只有在运行时才能知道是哪个类型
com.oldlu.visitor.dispatch.dynamic;/***
com.oldlu.visitor.dispatch.dynamic;/***
com.oldlu.visitor.dispatch.dynamic;/***
com.oldlu.visitor.dispatch.dynamic;/***
Women();man.test();women.test();}
当在编译期时man或women并不知道自己是什么类型只有在运行期
可以看到这里是一次动态分派调用accept方法具体的类型要到运行时才能确定。
当进入到一个子类中如Engineer,accept方法调用visit方法传参this,也是动态分派。
需要到
IOException;FileVisitor接口中定义visitFile方法。
传参BasicFileAtributes也是一个接口。
visitBeanDefinition(BeanDefinition
{visitParentName(beanDefinition);visitBeanClassName(beanDefinition);visitFactoryBeanName(beanDefinition);visitFactoryMethodName(beanDefinition);visitScope(beanDefinition);if
(beanDefinition.hasPropertyValues())
{visitPropertyValues(beanDefinition.getPropertyValues());}if
(beanDefinition.hasConstructorArgumentValues())
beanDefinition.getConstructorArgumentValues();visitIndexedArgumentValues(cas.getIndexedArgumentValues());visitGenericArgumentValues(cas.getGenericArgumentValues());}}访问时并未改变其中的内容只是返回相应结果。
把数据操作与结构进行分离。
1.无法增加元素类型若系统数据结构对象易于变化经常有新的数据对象增加进来
2.具体元素变更困难具体元素的增加属性删除属性等操作会导致对应访问者类需要
3.违背依赖倒置原则为了达到”区别对待“访问者依赖的是具体元素类型而不是抽象。
Pattern】,又叫发布-订阅【Publish/Subcribe】模式模型-视图【Model/View】模式、
源监听器【Source/Listener】模式从属者【Dependents】模式。
定义一种一对多的关系一个主题对象可被多个观察者对象同时监听使得每当主题对象状态变化时所有
1.当一个抽象模型包含两个方面内容其中一个方面依赖于另一个方面。
3.实现类似广播机制的功能无需知道具体收听者只需分发广播系统中感兴趣
4.多层嵌套使用形成一种链式触发机制使得事件具备跨域跨越两种观察者类型通知。
在学习社区我们有疑问可以发布问题求助。
发布问题时可以邀请某个人【或某个老师】进行
但是老师平时会很忙不会总是去刷新页面。
于是就会做一个通知功能。
当老师登录到页面时只要查看通知角标就能知道是否有人向他提问就方便回答。
com.oldlu.observer.demo.gper;import
question){System.out.println(question.getUserName()
apisetChanged();notifyObservers(question);}
com.oldlu.observer.demo.gper;/***
com.oldlu.observer.demo.gper;import
arg;System.out.println();System.out.println(name老师你好\n
您收到一个来自gper.getName()的提问希望你解答问题内容如下\nquestion.getContent()\n提问者question.getUserName());}
com.oldlu.observer.demo.gper;import
Teacher(Jerry);gper.addObserver(tom);gper.addObserver(jerry);//用户行为Question
Question();question.setUserName(张三);question.setContent(观察者模式适用于哪些场景);gper.publishQuestion(question);}
dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion18.0/version/dependency2.3.1
com.oldlu.observer.guava;import
com.google.common.eventbus.Subscribe;/***
str){System.out.println(执行observer方法传参为str);}
com.oldlu.observer.guava;import
com.google.common.eventbus.EventBus;/***
GuavaEvent();eventBus.register(event);eventBus.post(tom);}
com.oldlu.observer.mouseclick.core;import
callback){events.put(eventType,new
Event(target,callback));}public
target){try{this.addListener(eventType,target,target.getClass().getMethod(on
toUpperFirstCase(eventType),Event.class));}catch
e){e.printStackTrace();}}private
eventType.toCharArray();if(chars[0]
event){event.setSource(this);event.setTime(System.currentTimeMillis());try{if(null
回调函数event.getCallback().invoke(event.getTarget(),event);}}catch
e){e.printStackTrace();}}protected
trigger){if(!this.events.containsKey(trigger)){return;}//如果已进行注册回调trigger(this.events.get(trigger).setTrigger(trigger));}
com.oldlu.observer.mouseclick.event;import
com.oldlu.observer.mouseclick.core.EventListener;/***
{System.out.println(调用单机方法);this.trigger(MouseEventType.ON_CLICK);}
com.oldlu.observer.mouseclick.event;import
com.oldlu.observer.mouseclick.core.Event;/***
event){System.out.println(触发鼠标单击事件\nevent);}public
event){System.out.println(触发鼠标双击事件);}}4.传参bean,事件类
com.oldlu.observer.mouseclick.core;import
com.oldlu.observer.mouseclick.event;/***
com.oldlu.observer.mouseclick;import
com.oldlu.observer.mouseclick.event.Mouse;
com.oldlu.observer.mouseclick.event.MouseEventCallback;
com.oldlu.observer.mouseclick.event.MouseEventType;/***
Mouse();mouse.addListener(MouseEventType.ON_CLICK,callback);mouse.click();}
ContextLoaderListener(WebApplicationContext
contextInitialized(ServletContextEvent
{this.initWebApplicationContext(event.getServletContext());}public
contextDestroyed(ServletContextEvent
{this.closeWebApplicationContext(event.getServletContext());ContextCleanupListener.cleanupAttributes(event.getServletContext());}
2.分离表示层【观察者】和数据逻辑层【被观察者】并且建立了一套触发机制使得数据的变化可以
3.实现一对多的通讯机制支持事件注册机制支持兴趣分发机制当被观察者触发事件时只有感兴趣
2.事件通知呈线性关系如果其中一个观察者处理事件卡壳会影响后续的观察者接收该事件。
3.如果观察者和被观察者之间存在循环依赖则可能造成两者之间循环调用导致系统崩溃。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback