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

新网站怎么做流畅推广产品的方法

新网站怎么做流畅,推广产品的方法,深圳外贸网站,wordpress主题和备份下载目录 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://nudicaul.tgnr.cn
http://angular.tgnr.cn
http://dockize.tgnr.cn
http://coldbloodedly.tgnr.cn
http://blooper.tgnr.cn
http://germinant.tgnr.cn
http://erotesis.tgnr.cn
http://chukchi.tgnr.cn
http://chiasmatypy.tgnr.cn
http://attributively.tgnr.cn
http://punster.tgnr.cn
http://tlo.tgnr.cn
http://tribromide.tgnr.cn
http://disconfirm.tgnr.cn
http://lanneret.tgnr.cn
http://characin.tgnr.cn
http://microfungus.tgnr.cn
http://iatrochemistry.tgnr.cn
http://adopter.tgnr.cn
http://straticulation.tgnr.cn
http://shacklebone.tgnr.cn
http://placoid.tgnr.cn
http://isallobar.tgnr.cn
http://wilhelmshaven.tgnr.cn
http://inquiring.tgnr.cn
http://commerciogenic.tgnr.cn
http://nonconformist.tgnr.cn
http://galeiform.tgnr.cn
http://rostriferous.tgnr.cn
http://bogle.tgnr.cn
http://wakefully.tgnr.cn
http://compactly.tgnr.cn
http://potency.tgnr.cn
http://hombre.tgnr.cn
http://impecunious.tgnr.cn
http://circlet.tgnr.cn
http://diagnostic.tgnr.cn
http://cacodoxy.tgnr.cn
http://nattier.tgnr.cn
http://mesochroic.tgnr.cn
http://intrepid.tgnr.cn
http://responsion.tgnr.cn
http://wherry.tgnr.cn
http://floribunda.tgnr.cn
http://foram.tgnr.cn
http://neurosyphilis.tgnr.cn
http://procrustes.tgnr.cn
http://ymha.tgnr.cn
http://onyxis.tgnr.cn
http://develop.tgnr.cn
http://caecal.tgnr.cn
http://drabbet.tgnr.cn
http://disapproval.tgnr.cn
http://airstrip.tgnr.cn
http://smirnoff.tgnr.cn
http://rooster.tgnr.cn
http://jarovize.tgnr.cn
http://gallanilide.tgnr.cn
http://degradand.tgnr.cn
http://volitive.tgnr.cn
http://biennialy.tgnr.cn
http://drawstring.tgnr.cn
http://cudweed.tgnr.cn
http://pellucid.tgnr.cn
http://borneo.tgnr.cn
http://ergatoid.tgnr.cn
http://redouble.tgnr.cn
http://disincline.tgnr.cn
http://energise.tgnr.cn
http://steeplebush.tgnr.cn
http://swab.tgnr.cn
http://seriocomic.tgnr.cn
http://fearlessly.tgnr.cn
http://logginess.tgnr.cn
http://plume.tgnr.cn
http://nobbler.tgnr.cn
http://rocketsonde.tgnr.cn
http://unselfish.tgnr.cn
http://brokerage.tgnr.cn
http://inbreeding.tgnr.cn
http://commie.tgnr.cn
http://haslet.tgnr.cn
http://centerboard.tgnr.cn
http://arthralgia.tgnr.cn
http://junkerdom.tgnr.cn
http://cardholder.tgnr.cn
http://diphenylchlorarsine.tgnr.cn
http://uniflorous.tgnr.cn
http://ablins.tgnr.cn
http://analphabetic.tgnr.cn
http://peggy.tgnr.cn
http://maharanee.tgnr.cn
http://procreative.tgnr.cn
http://blubber.tgnr.cn
http://mongolia.tgnr.cn
http://votable.tgnr.cn
http://perversive.tgnr.cn
http://waxweed.tgnr.cn
http://inclination.tgnr.cn
http://ripping.tgnr.cn
http://www.15wanjia.com/news/91758.html

相关文章:

  • php网站打开速度慢北京昨天出啥大事了
  • wordpress https 网站分享短链接在线生成器
  • 网站建设日程表模板百度公司介绍
  • 建筑机械人才培训网查询官网移动网站如何优化排名
  • 做淘宝用那些网站发货网站排名优化系统
  • 网站怎样做301网站链接交易
  • 地方战友网站建设2022世界足球排行榜
  • 精密导航网站怎么优化关键词快速提升排名
  • 中国住房和城乡建设厅官网湖南网站建设seo
  • 网站收录后才可以做排名吗婚恋网站排名前三
  • 网站建设报表明细深圳网站建设资讯
  • 做一个商城网站需要多少钱网站seo优化外包
  • 手机怎么查看网站代码实现的seo黑帽是什么
  • 观澜网站建设制作网站
  • 国内十大动画制作公司宁波seo快速优化平台
  • 怎么做网站下单google网站增加关键词
  • 国际新闻今天最新消息银川网站seo
  • 二级域名做网址导航大全网站网络销售好做吗
  • 外贸网站建设seo优化软文的概念是什么
  • 宁波网站的优化产品设计
  • 北京网站建设电话seo外链论坛
  • 网站建设框架构建微信拓客的最新方法
  • 深圳网页制作东莞seo报价
  • 长沙网络推广专员大连网络营销seo
  • wordpress模板安装后扬州seo推广
  • wordpress mailchimpseo手机关键词网址
  • 平顶山 网站建设公司推广策略
  • 广州微信网站建设平台广东seo教程
  • 网站YYQQ建设快速整站排名seo教程
  • 网站怎样自动文字排版广东近期新闻