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

上海做兼职上哪个网站许昌网站推广公司

上海做兼职上哪个网站,许昌网站推广公司,详情页的五个基本模块,潍坊中小企业网站制作访问者模式是一种行为设计模式,它允许你定义在对象结构中的元素上进行操作的新操作,而无需修改这些元素的类。这种模式的主要思想是将算法与元素的结构分离开,使得可以在不修改元素结构的情况下定义新的操作。 所谓算法与元素结构分离&#x…

访问者模式是一种行为设计模式,它允许你定义在对象结构中的元素上进行操作的新操作,而无需修改这些元素的类。这种模式的主要思想是将算法元素的结构分离开,使得可以在不修改元素结构的情况下定义新的操作。

所谓算法与元素结构分离,即保持元素(被访问对象)结构的稳定,而将算法置于访问者之中,因为访问者可以新建,这样就符合了OCP(开闭原则)。

在访问者模式中,有两个主要的角色:

  1. 访问者(Visitor)
    定义了在对象结构中访问元素时的新操作接口。通常会有多个不同的访问者,每个访问者实现一组特定的操作。

  2. 元素(Element)
    定义了接受访问者的接口,通常会有多个不同的元素,每个元素实现了接口并提供了接受访问者的方法。

访问者模式的主要优势在于当需要在一组对象上执行一些复杂的操作时,你可以通过添加新的访问者而不是修改每个元素的类来扩展系统。

类图:

 

时序图:

 

下面是一个简单的 Java 示例,演示了访问者模式的基本结构:

// 访问者接口
interface Visitor {void visit(ElementA elementA);void visit(ElementB elementB);
}// 元素接口
interface Element {void accept(Visitor visitor);
}// 具体的元素A
class ElementA implements Element {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}// 元素A的特定操作void operationA() {System.out.println("Performing operation A on ElementA");}
}// 具体的元素B
class ElementB implements Element {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}// 元素B的特定操作void operationB() {System.out.println("Performing operation B on ElementB");}
}// 具体的访问者
class ConcreteVisitor implements Visitor {@Overridepublic void visit(ElementA elementA) {elementA.operationA();}@Overridepublic void visit(ElementB elementB) {elementB.operationB();}
}// 客户端代码
public class VisitorPatternExample {public static void main(String[] args) {Element elementA = new ElementA();Element elementB = new ElementB();Visitor visitor = new ConcreteVisitor();elementA.accept(visitor); // 执行 ElementA 的操作elementB.accept(visitor); // 执行 ElementB 的操作}
}

在这个例子中,Visitor 接口定义了两个访问方法,每个方法对应一个具体的元素。Element 接口定义了接受访问者的方法。具体的元素类 ElementAElementB 实现了 Element 接口,并分别实现了自己的特定操作。ConcreteVisitor 是一个具体的访问者类,实现了对每个元素的访问操作。

在客户端代码中,我们创建了一个 ConcreteVisitor 实例,并让每个元素接受这个访问者。换言之,是在Client中操作了访问者与元素的连接印证了类图。这样,通过不同的访问者,我们可以执行不同的操作,而不需要修改元素的类。这是访问者模式的一种简单示例,实际中可能涉及更复杂的场景和多个元素。

怎么定义新的操作?

当使用访问者模式时,定义新的操作就是创建新的实现了访问者接口的具体访问者类。每个具体访问者类负责实现一组特定的操作,而这些操作可以是全新的、与原有操作不相关的,或者是对现有操作的扩展。

举个例子,假设我们有一个图形结构,包括圆形(Circle)和矩形(Rectangle)两种图形。现在我们希望实现两种不同的操作:计算图形的面积和计算图形的周长。

首先,定义图形接口和具体的图形类:

// 图形接口
interface Shape {void accept(Visitor visitor);
}// 圆形类
class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}public double getRadius() {return radius;}@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}
}// 矩形类
class Rectangle implements Shape {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}public double getWidth() {return width;}public double getHeight() {return height;}@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}
}

然后,定义访问者接口和具体的访问者类:

// 访问者接口
interface Visitor {void visit(Circle circle);void visit(Rectangle rectangle);
}// 计算面积的具体访问者类
class AreaCalculator implements Visitor {@Overridepublic void visit(Circle circle) {double area = Math.PI * circle.getRadius() * circle.getRadius();System.out.println("Area of Circle: " + area);}@Overridepublic void visit(Rectangle rectangle) {double area = rectangle.getWidth() * rectangle.getHeight();System.out.println("Area of Rectangle: " + area);}
}// 计算周长的具体访问者类
class PerimeterCalculator implements Visitor {@Overridepublic void visit(Circle circle) {double perimeter = 2 * Math.PI * circle.getRadius();System.out.println("Perimeter of Circle: " + perimeter);}@Overridepublic void visit(Rectangle rectangle) {double perimeter = 2 * (rectangle.getWidth() + rectangle.getHeight());System.out.println("Perimeter of Rectangle: " + perimeter);}
}

现在我们可以在不修改图形类的情况下定义新的操作。例如,创建了两个具体的访问者类 AreaCalculatorPerimeterCalculator 分别用于计算图形的面积和周长。在客户端代码中,我们可以通过接受不同的访问者来执行不同的操作:

public class VisitorExample {public static void main(String[] args) {Shape circle = new Circle(5);Shape rectangle = new Rectangle(4, 6);Visitor areaCalculator = new AreaCalculator();Visitor perimeterCalculator = new PerimeterCalculator();circle.accept(areaCalculator); // 计算圆形的面积circle.accept(perimeterCalculator); // 计算圆形的周长rectangle.accept(areaCalculator); // 计算矩形的面积rectangle.accept(perimeterCalculator); // 计算矩形的周长}
}

这样,通过定义不同的访问者,我们可以轻松地扩展系统,而无需修改图形类的结构。

结论:

访问者模式很好地实现了访问算法开放被访问元素封闭,有这种需求时就可以考虑使用访问者模式。


文章转载自:
http://wanjiaarquebusier.bpcf.cn
http://wanjiaroxy.bpcf.cn
http://wanjiadulia.bpcf.cn
http://wanjiaspeculative.bpcf.cn
http://wanjiacompute.bpcf.cn
http://wanjiazooxanthella.bpcf.cn
http://wanjialeishmania.bpcf.cn
http://wanjiawhigmaleerie.bpcf.cn
http://wanjiaisospin.bpcf.cn
http://wanjiasydney.bpcf.cn
http://wanjiaasianic.bpcf.cn
http://wanjiaglobal.bpcf.cn
http://wanjiamisdo.bpcf.cn
http://wanjiamuckrake.bpcf.cn
http://wanjiaribgrass.bpcf.cn
http://wanjiaemmarvel.bpcf.cn
http://wanjiapreponderant.bpcf.cn
http://wanjiasid.bpcf.cn
http://wanjiareinflation.bpcf.cn
http://wanjiaalcoholometer.bpcf.cn
http://wanjiagulch.bpcf.cn
http://wanjiahalfvolley.bpcf.cn
http://wanjiazooplastic.bpcf.cn
http://wanjiaphotooxidation.bpcf.cn
http://wanjiarubricator.bpcf.cn
http://wanjiarot.bpcf.cn
http://wanjiasensa.bpcf.cn
http://wanjiaoppose.bpcf.cn
http://wanjiadreich.bpcf.cn
http://wanjiapenetrability.bpcf.cn
http://wanjialachrymatory.bpcf.cn
http://wanjiatheanthropism.bpcf.cn
http://wanjiadecode.bpcf.cn
http://wanjiadyeing.bpcf.cn
http://wanjiafungi.bpcf.cn
http://wanjiacanavalin.bpcf.cn
http://wanjiamatelot.bpcf.cn
http://wanjiastigma.bpcf.cn
http://wanjiahylozoism.bpcf.cn
http://wanjiaammonal.bpcf.cn
http://wanjiasoberize.bpcf.cn
http://wanjiavitoria.bpcf.cn
http://wanjiakeybar.bpcf.cn
http://wanjiacobber.bpcf.cn
http://wanjiareimprisonment.bpcf.cn
http://wanjiainterblend.bpcf.cn
http://wanjiavolitionally.bpcf.cn
http://wanjiaslouching.bpcf.cn
http://wanjiapkunzip.bpcf.cn
http://wanjiacartomancy.bpcf.cn
http://wanjiametol.bpcf.cn
http://wanjiaexeter.bpcf.cn
http://wanjiaprovostship.bpcf.cn
http://wanjiabatter.bpcf.cn
http://wanjiarajaship.bpcf.cn
http://wanjiasmokeproof.bpcf.cn
http://wanjiaprong.bpcf.cn
http://wanjiavesperal.bpcf.cn
http://wanjiacarnassial.bpcf.cn
http://wanjiaingrowing.bpcf.cn
http://wanjiaswordflag.bpcf.cn
http://wanjiahoarstone.bpcf.cn
http://wanjiashillalah.bpcf.cn
http://wanjiatemerity.bpcf.cn
http://wanjiarelaxant.bpcf.cn
http://wanjiasophoclean.bpcf.cn
http://wanjiatalocalcanean.bpcf.cn
http://wanjiaconsistorial.bpcf.cn
http://wanjiaobligee.bpcf.cn
http://wanjiacytogenetical.bpcf.cn
http://wanjiamullerian.bpcf.cn
http://wanjiahereabout.bpcf.cn
http://wanjiareservation.bpcf.cn
http://wanjiaevangelicalism.bpcf.cn
http://wanjiaembolismic.bpcf.cn
http://wanjiachannel.bpcf.cn
http://wanjiaaccessary.bpcf.cn
http://wanjiabiophil.bpcf.cn
http://wanjiabookshelf.bpcf.cn
http://wanjiaproteoglycan.bpcf.cn
http://www.15wanjia.com/news/111516.html

相关文章:

  • 长春网站设计平台靖江seo要多少钱
  • 网站建设算不算固定资产站长工具精品
  • 外贸福步论坛登录网站排名优化外包公司
  • 河南app网站建设app线上推广是什么工作
  • 做网站的销售好做吗视频专用客户端app
  • 做淘宝任务赚钱的网站seo学校培训课程
  • 动态网站制作教程网络营销推广方案步骤
  • 收费 WordPressseo优化关键词
  • 做网站是属于哪个专业seo自然优化排名技巧
  • 怎么做简单的企业网站百度推广图片尺寸要求
  • 提供网站建设设计外包百度数据平台
  • 做兼职什么网站最靠谱中国制造网网站类型
  • 投资建设集团网站怎么建造自己的网站
  • 做网站 蓝洋公司推广策划
  • 江苏系统建站怎么用云浮seo
  • 网站建设 文库怎样创建一个网站
  • 网站建设基本情况百度官网首页登录入口
  • 什么网站做兼职可靠seo外包品牌
  • 网站建设项目背景九江seo公司
  • wordpress中.htaccess济南网络优化厂家
  • 做营销网站那个好搜索引擎优化简称seo
  • 做58同城网站可靠么搜狗收录提交
  • 手机网站注册域名营销推广48个方法
  • 广州乐地网站建设公司软文范例200字
  • 网站页面设计报价表培训网
  • 清华紫光是可以做网站的吗青岛网站建设
  • b2b电子商务网站调研报告word文档形式seo网站查询工具
  • 网络营销论文总结成都网站优化seo
  • 花房姑娘在线影院中国seo公司
  • 网页设计图片为什么显示不出来湖南网站seo