当前位置: 首页 > 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.huolong8.cn/news/260942/

相关文章:

  • 网站搭建模板网上建设银行网站首页
  • 建设刷单网站平台手机app开发
  • 公司网站推广的方法晋江论坛兔区网友留言区
  • 网站设计网页设计公司app制作开发软件
  • 动态照片素材网站惠州网站建设教程
  • 第三方做农产品价格数据的网站网站策划书注意事项
  • 重庆工程建设造价信息网站贵州seo策略
  • itc 做市场分析的网站注册商标名字推荐
  • 北京网站设计制作关键词wordpress电影网教程
  • 外贸网站设计公司价格中国欧洲陆运专线
  • .net做网站用什么的多免费的个人简历模板pdf
  • 自己做的网站加载不出验证码c2c商城网站建设公司
  • 网站建设的关键要素网站建设及运营工作总结
  • 怎么用html做移动网站烟台百度网站推广
  • 阿里云建站简单三栏网站
  • 河北世达建设集团有限公司网站手机网站建设知识
  • 永康住房和城乡建设局网站WordPress增加积分系统
  • 常德举报网站个人做流量大的网站
  • 橘色网站模板中小企业网站建设客户需求调查问卷
  • 厚街h5网站建设内蒙古住房城乡建设部网站
  • 学做ppt的网站有哪些wordpress is tax
  • 军博网站建设二人对战的微信小程序
  • 全国网站建设汇编网络培训班心得体会800字
  • 做网站最贵软件外包公司哪个好
  • 贵金属十大正规app平台排名简单网站建设优化推广
  • 泵网站建设长沙航科网页制作
  • 不花钱自己可以做网站吗给别人做软件的网站
  • c2c网站开发策划做网站还 淘宝
  • 网站404页面怎么做seo怎么做
  • 利用花生壳做网站做网站要哪些人员