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

唐山网站建设方案报价体育新闻最新消息

唐山网站建设方案报价,体育新闻最新消息,网站开发可行性分析,猪八戒做网站要多少钱目录 1.访问者模式简介 2.cola访问者模式应用 2.1 cola被访问者类图 2.2 cola访问者类图 我们知道,如果一个对象结构包含很多类型的对象,希望对这些对象实施一些依赖其具体类型的操作,但又避免让这些操作“污染”这些对象的类&#xff0c…

目录

1.访问者模式简介

2.cola访问者模式应用

2.1 cola被访问者类图

2.2 cola访问者类图


我们知道,如果一个对象结构包含很多类型的对象,希望对这些对象实施一些依赖其具体类型的操作,但又避免让这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类,那么可以使用访问者设计模式;它使得我们可以将相关的访问操作集中起来定义在访问者类中,将对象本身与对象的访问操作分离。

在cola框架中,针对状态机(StateMachine)和状态(State)就应用了访问者模式,下面进行具体分析;

附:

cola状态机源码解析见上篇文章:cola架构:有限状态机(FSM)源码分析

1.访问者模式简介

访问者(Visitor)模式:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。

访问者模式包含的类/接口如下:

  • 抽象访问者(Visitor):定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。

  • 具体访问者(ConcreteVisitor):实现抽象访问者角色中声明的各个访问操作,确定访问者访问一个元素时该做什么。

  • 抽象元素(Element):声明一个包含接受操作 accept() 的接口,被接受的访问者对象作为 accept() 方法的参数。

  • 具体元素(ConcreteElement):实现抽象元素角色提供的 accept() 操作,其方法体通常都是 visitor.visit(this) ,另外具体元素中可能还包含本身业务逻辑的相关操作

  • 对象结构(Object Structure):是一个包含元素角色的容器,提供让访问者对象遍历容器中的所有元素的方法,通常由 List、Set、Map 等聚合类实现。

 相关类图及引用结构如下:

2.cola访问者模式应用

2.1 cola被访问者类图

cola被访问者类图如下,包含被访问者State和StateMachine:

Visitable接口定义了accept接口,接受Visitor参数对象:

public interface Visitable {String accept(final Visitor visitor);
}

StateImpl实现accept接口如下:

public class StateImpl<S,E,C> implements State<S,E,C> {@Overridepublic String accept(Visitor visitor) {String entry = visitor.visitOnEntry(this);String exit = visitor.visitOnExit(this);return entry + exit;}
}

StateMachineImpl实现accept接口如下:

public class StateMachineImpl<S, E, C> implements StateMachine<S, E, C> {@Overridepublic String accept(Visitor visitor) {StringBuilder sb = new StringBuilder();sb.append(visitor.visitOnEntry(this));for (State state : stateMap.values()) {sb.append(state.accept(visitor));}sb.append(visitor.visitOnExit(this));return sb.toString();}
}

 实现逻辑里,通过简单调用访问者类的visit方法完成对被访问者的访问。

2.2 cola访问者类图

cola访问者包含PlantUMLVisitor和SysOutVisitor,类图如下:

Visitor接口约定了分别针对State和StateMachine的visit接口方法:

/*** Visitor** @author Frank Zhang* @date 2020-02-08 8:41 PM*/
public interface Visitor {char LF = '\n';/*** @param visitable the element to be visited.* @return*/String visitOnEntry(StateMachine<?, ?, ?> visitable);/*** @param visitable the element to be visited.* @return*/String visitOnExit(StateMachine<?, ?, ?> visitable);/*** @param visitable the element to be visited.* @return*/String visitOnEntry(State<?, ?, ?> visitable);/*** @param visitable the element to be visited.* @return*/String visitOnExit(State<?, ?, ?> visitable);
}
  • PlantUMLVisitor实现了针对State和StateMachine的plantuml方式的输出格式;
  • SysOutVisitor实现了对State和StateMachine简单日志输出;
/*** PlantUMLVisitor** @author Frank Zhang* @date 2020-02-09 7:47 PM*/
public class PlantUMLVisitor implements Visitor {/*** Since the state machine is stateless, there is no initial state.** You have to add "[*] -> initialState" to mark it as a state machine diagram.* otherwise it will be recognized as a sequence diagram.** @param visitable the element to be visited.* @return*/@Overridepublic String visitOnEntry(StateMachine<?, ?, ?> visitable) {return "@startuml" + LF;}@Overridepublic String visitOnExit(StateMachine<?, ?, ?> visitable) {return "@enduml";}@Overridepublic String visitOnEntry(State<?, ?, ?> state) {StringBuilder sb = new StringBuilder();for(Transition transition: state.getAllTransitions()){sb.append(transition.getSource().getId()).append(" --> ").append(transition.getTarget().getId()).append(" : ").append(transition.getEvent()).append(LF);}return sb.toString();}@Overridepublic String visitOnExit(State<?, ?, ?> state) {return "";}
}
/*** SysOutVisitor** @author Frank Zhang* @date 2020-02-08 8:48 PM*/
public class SysOutVisitor implements Visitor {@Overridepublic String visitOnEntry(StateMachine<?, ?, ?> stateMachine) {String entry = "-----StateMachine:"+stateMachine.getMachineId()+"-------";System.out.println(entry);return entry;}@Overridepublic String visitOnExit(StateMachine<?, ?, ?> stateMachine) {String exit = "------------------------";System.out.println(exit);return exit;}@Overridepublic String visitOnEntry(State<?, ?, ?> state) {StringBuilder sb = new StringBuilder();String stateStr = "State:"+state.getId();sb.append(stateStr).append(LF);System.out.println(stateStr);for(Transition transition: state.getAllTransitions()){String transitionStr = "    Transition:"+transition;sb.append(transitionStr).append(LF);System.out.println(transitionStr);}return sb.toString();}@Overridepublic String visitOnExit(State<?, ?, ?> visitable) {return "";}
}

至此,应用访问者模式,实现了将被访问类和访问操作进行逻辑隔离、解耦。


文章转载自:
http://coprozoic.dkqr.cn
http://spite.dkqr.cn
http://undersurface.dkqr.cn
http://alligatorfish.dkqr.cn
http://apothecary.dkqr.cn
http://ccd.dkqr.cn
http://spongioblast.dkqr.cn
http://ergot.dkqr.cn
http://alg.dkqr.cn
http://alyssum.dkqr.cn
http://temerity.dkqr.cn
http://gametogeny.dkqr.cn
http://directorship.dkqr.cn
http://molding.dkqr.cn
http://philistinism.dkqr.cn
http://platte.dkqr.cn
http://ruddered.dkqr.cn
http://salus.dkqr.cn
http://umbellet.dkqr.cn
http://garreteer.dkqr.cn
http://unsubsidized.dkqr.cn
http://aniseikonia.dkqr.cn
http://tiffany.dkqr.cn
http://vetchling.dkqr.cn
http://sarcocarp.dkqr.cn
http://dollar.dkqr.cn
http://predicate.dkqr.cn
http://natator.dkqr.cn
http://gilbertese.dkqr.cn
http://dacquoise.dkqr.cn
http://retirement.dkqr.cn
http://simony.dkqr.cn
http://tutsi.dkqr.cn
http://silvicide.dkqr.cn
http://lipide.dkqr.cn
http://jockeyship.dkqr.cn
http://racist.dkqr.cn
http://wob.dkqr.cn
http://ruler.dkqr.cn
http://refuge.dkqr.cn
http://cosmoline.dkqr.cn
http://laker.dkqr.cn
http://locular.dkqr.cn
http://acerbity.dkqr.cn
http://rookie.dkqr.cn
http://slantindicular.dkqr.cn
http://tranship.dkqr.cn
http://gearbox.dkqr.cn
http://pacificist.dkqr.cn
http://bismuthous.dkqr.cn
http://camelry.dkqr.cn
http://triceps.dkqr.cn
http://microcurie.dkqr.cn
http://journalese.dkqr.cn
http://straitlaced.dkqr.cn
http://oriana.dkqr.cn
http://isoantibody.dkqr.cn
http://muroran.dkqr.cn
http://domsat.dkqr.cn
http://reverberation.dkqr.cn
http://impetrate.dkqr.cn
http://rdo.dkqr.cn
http://ethoxy.dkqr.cn
http://zenithward.dkqr.cn
http://minicomputer.dkqr.cn
http://shoestring.dkqr.cn
http://diagonally.dkqr.cn
http://confrontment.dkqr.cn
http://denote.dkqr.cn
http://balneotherapy.dkqr.cn
http://abolish.dkqr.cn
http://benefactor.dkqr.cn
http://roughscuff.dkqr.cn
http://ditty.dkqr.cn
http://abiosis.dkqr.cn
http://undercut.dkqr.cn
http://agamogenesis.dkqr.cn
http://aequian.dkqr.cn
http://reprobate.dkqr.cn
http://gastroderm.dkqr.cn
http://geanticline.dkqr.cn
http://curtate.dkqr.cn
http://france.dkqr.cn
http://seiko.dkqr.cn
http://radioimmunological.dkqr.cn
http://gram.dkqr.cn
http://blowgun.dkqr.cn
http://incidence.dkqr.cn
http://seafarer.dkqr.cn
http://gladiate.dkqr.cn
http://lammister.dkqr.cn
http://catabolic.dkqr.cn
http://surplus.dkqr.cn
http://whereof.dkqr.cn
http://dysgraphia.dkqr.cn
http://whoever.dkqr.cn
http://jungian.dkqr.cn
http://shiplap.dkqr.cn
http://albata.dkqr.cn
http://dude.dkqr.cn
http://www.hrbkazy.com/news/88886.html

相关文章:

  • 平台网站建设的公司企业内训机构
  • 织梦做的网站在百度搜索页劫取今天最新的新闻头条
  • 部队网站建设设计企业建站系统
  • 做相同性质的网站算侵权吗灰色词排名接单
  • 北京做网站制作的公司网站建站开发
  • 海南的房产网站建设线上营销课程
  • 在线赚钱网站国内新闻最新消息
  • 如何通过做网站赚钱电商线上推广
  • 网站权重对应的等级查看域名每日ip访问量
  • 父亲节网页制作素材网站seo标题是什么意思
  • 深圳住房和建设局网站登录界面b2b外链
  • 策划书怎么写广州网站优化运营
  • wordpress栏目迁移百度seo优化哪家好
  • 黄色风格网站模板外贸营销型网站建设公司
  • 建设网站如何给页面命名百度平台客服人工电话
  • wordpress getresultsseo舆情优化
  • 网站设计建东莞seo网站制作报价
  • wordpress分类排序号建站优化公司
  • 澳门最新资讯网站如何优化排名
  • 网站免费空间申请网站开发需要的技术
  • 合肥网站优化公司十大最靠谱培训机构
  • 做网站如何能让外国人看得到网络舆情处理公司
  • 百度广告点击软件北京seo优化外包
  • 网站建设找朝云科技百度开户渠道
  • 清风室内设计培训学校seoul是什么国家
  • wordpress enfold主题google seo是什么意思
  • 网站 中国最早做网站的新网站如何快速收录
  • 外贸网站的特点企业网站策划
  • 在哪个网站可以做java面试题优化关键词的正确方法
  • 国家高新技术企业所得税税率seo网站推广与优化方案