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

成都网站设计施工企业成本核算方法

成都网站设计,施工企业成本核算方法,做电商讲师课程的网站,科技部政务服务平台访问者模式是一种行为设计模式#xff0c;可封装一些作用于当前数据结构的各元素的操作#xff0c;它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 Visitor is a behavior design pattern that encapsulates some operations that act on the elements of t…访问者模式是一种行为设计模式可封装一些作用于当前数据结构的各元素的操作它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 Visitor is a behavior design pattern that encapsulates some operations that act on the elements of the current data structure. It can define new operations that act on these elements without changing the data structure. 结构设计 访问者模式包含如下角色 Visitor访问者基类声明了一系列以对象结构的具体元素为参数的访问者方法。这些方法的名称可能是相同的但是其参数一定是不同的。 ConcreteVisitor具体访问者会为不同的具体元素类实现相同行为的几个不同版本。 ObjectStructure对象结构类该类能枚举它包含的元素可以提供一个高层的接口以允许访问者访问它的元素。 Element元素声明了一个方法来“接收”(accept)访问者。该方法必须有一个参数被声明为访问者接口类型。 ConcreteElement具体元素实现Element声明的接口。该方法的目的是根据当前元素类将其调用重定向到相应访问者的方法。 Client客户端客户端通常不知晓所有的具体元素类因为它们会通过抽象接口与集合中的对象进行交互。 访问者模式类图表示如下 访问者模式可将数据结构与数据操作分离可以解决稳定的数据结构和易变的操作耦合问题。 伪代码实现 接下来将使用代码介绍下访问者模式的实现。 // 1、访问者基类声明了对对象结构的具体元素为参数的访问者方法 public interface IVisitor {void visitElement(ConcreteElementA element);void visitElement(ConcreteElementB element); }//2、具体访问者为不同的具体元素类实现相同行为的几个不同版本 public class ConcreteVisitorA implements IVisitor {Overridepublic void visitElement(ConcreteElementA element) {System.out.println(handle a ConcreteElementA instance in ConcreteVisitorA);}Overridepublic void visitElement(ConcreteElementB element) {System.out.println(handle a ConcreteElementB instance in ConcreteVisitorA);} } public class ConcreteVisitorB implements IVisitor {Overridepublic void visitElement(ConcreteElementA element) {System.out.println(handle a ConcreteElementA instance in ConcreteVisitorB);}Overridepublic void visitElement(ConcreteElementB element) {System.out.println(handle a ConcreteElementB instance in ConcreteVisitorB);} }// 3、元素声明了一个方法来“接收”(accept)访问者。该方法必须有一个参数被声明为访问者接口类型 public interface IElement {void accept(IVisitor visitor); }// 4、具体元素实现Element声明的接口 public class ConcreteElementA implements IElement {public void accept(IVisitor visitor) {visitor.visitElement(this);} } public class ConcreteElementB implements IElement {public void accept(IVisitor visitor) {visitor.visitElement(this);} }// 5、对象结构类可枚举它包含的元素可以提供一个高层的接口以允许访问者访问它的元素 public class ObjectStructure {private IElement elementA;private IElement elementB;public ObjectStructure(IElement elementA, IElement elementB) {this.elementA elementA;this.elementB elementB;}public IElement getElementA() {return this.elementA;}public IElement getElementB() {return this.elementB;} }// 6、客户端 public class VisitorClient {public void test() {// (1) 创建元素实例IElement elementA new ConcreteElementA();IElement elementB new ConcreteElementB();// (2) 创建对象结构实例ObjectStructure objectStructure new ObjectStructure(elementA, elementB);// (3) 创建具体访问者实例IVisitor visitorA new ConcreteVisitorA();// (4) 调用访问者方法visitorA.visitElement((ConcreteElementA) objectStructure.getElementA());visitorA.visitElement((ConcreteElementB) objectStructure.getElementB());IVisitor visitorB new ConcreteVisitorB();visitorB.visitElement((ConcreteElementA) objectStructure.getElementA());visitorB.visitElement((ConcreteElementB) objectStructure.getElementB());} }适用场景 在以下情况下可以考虑使用访问者模式 (1) 如果需要对一个复杂对象结构中的所有元素执行某些操作可考虑使用访问者模式。访问者模式通过在访问者对象中为多个目标类提供相同操作的变体 让开发者能在属于不同类的一组对象上执行同一操作。 (2) 可使用访问者模式来清理辅助行为的业务逻辑。访问者模式可将所有非主要的行为抽取到一组访问者类中使得程序的主要类能更专注于主要的工作。 (3) 当某个行为仅在类层次结构中的一些类中有意义而在其他类中没有意义时可考虑使用访问者模式。可将该行为抽取到单独的访问者类中 只需实现接收相关类的对象作为参数的访问者方法并将其他方法留空即可。 优缺点 访问者模式有以下优点 (1) 符合开闭原则。以引入在不同类对象上执行的新行为 且无需对这些类做出修改。 (2) 符合单一职责原则。可将同一行为的不同版本移到同一个类中。 但是该模式也存在以下缺点 (1) 代码可能会变得更加复杂。使用访问者模式可能会导致某些系统有过多的具体访问者类。 (2) 每次在元素层次结构中添加或移除一个类时都要更新所有的访问者所以该模式对于频繁调整对象结构的类并不友好。 (3) 在访问者同某个元素进行交互时可能没有访问元素私有成员变量和方法的必要权限。这与迪米特法则相违背。 (4) 违背了依赖倒转原则。访问者依赖的是具体元素而不是抽象元素。 参考 《设计模式 可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著, 李英军, 马晓星等译 https://refactoringguru.cn/design-patterns/visitor 访问者模式 https://www.runoob.com/design-pattern/visitor-pattern.html 访问者模式 https://www.cnblogs.com/adamjwh/p/10968634.html 简说设计模式——访问者模式
http://www.yutouwan.com/news/260942/

相关文章:

  • 宁波市高等级公路建设指挥部网站西安小程序开发哪家好
  • 网站页面报价个人网站备案需要哪些
  • 中国农村建设网站首页昆明手机app开发
  • 做发包业务网站wordpress 验证表单
  • 网站空间虚拟主机阿里云自助建站教程
  • 百度网站推广服务商南京龙媒网络科技有限公司
  • 网站开发用哪个框架品牌名字大全
  • 天津公司网站设计怎么看网站用什么平台做的
  • 公司网页网站建设 ppt武侯区网站建设哪里好点
  • 网站备案的网站名称做网站如何规避法律风险
  • 建设一个蛋糕网站的背景与目的作作网站
  • 关于建立网站的申请重庆快速网站推广
  • 学做网站看什么dw 怎么做钓鱼网站
  • 惠州建设工程交易网站手机网页版抖音入口
  • 高端响应式网站长春哪家做网站做的好
  • 太原百度网站建设一个门户网站多少钱
  • 淘宝做网站推广人电话想在百度做推广怎么做
  • 公司网站制作效果怎么样在上海找工作用哪个招聘网好
  • 陵水专业网站建设怎样查询二级建造师注册情况
  • ps做网站导航条phpcms 关闭网站
  • 中国建设网官方网站企业wordpress开发教程 pdf
  • 代码判断网站泰安网络推广公司平台
  • 湖州长兴建设局网站wordpress打赏按钮
  • 代做网站排名天元建设集团有限公司代码
  • php网站建设管理教材做婚介网站可行性报告
  • 天河营销型网站建设金乡网站建设多少钱
  • 网页制作与网站建设文档it前端是做网站的
  • 重庆网站建站系统哪家好有哪些网站是可以做免费推广的
  • 琼海做网站口碑自己做app的网站
  • 供需网站开发WordPress 4.9添加备案号