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

网站如何做微信推广方案设计网络竞价

网站如何做微信推广方案设计,网络竞价,12306网站能不能用银河二计算机做服务器啊慢得要死,盘锦网站建设哪家好🧠 访问者模式(Visitor Pattern) 访问者模式是一种行为型设计模式,它允许你在不改变对象结构的情况下,增加新的操作。简单来说,访问者模式可以使得你在不修改类的情况下,向已有的类中添加新的操…

🧠 访问者模式(Visitor Pattern)

访问者模式是一种行为型设计模式,它允许你在不改变对象结构的情况下,增加新的操作。简单来说,访问者模式可以使得你在不修改类的情况下,向已有的类中添加新的操作逻辑。

访问者模式的核心思想是:将数据结构与操作分离,把操作封装到访问者中。可以使得新增的操作可以通过访问者去执行,而无需修改数据结构本身。


🎯 为什么需要访问者模式?

  1. 扩展性强:访问者模式可以很容易地扩展新的操作,而不需要修改现有的数据结构或类。
  2. 双重分离:将操作和数据结构分离,允许数据结构和操作分开变化,符合“开闭原则”,易于维护和拓展。
  3. 封装行为:通过访问者模式封装多种操作,并避免修改原始类,减少类的复杂度。

优缺点分析

优点缺点
增加新的操作时不需要修改原有对象结构,符合开闭原则增加新的数据结构类时需要修改所有访问者,不利于数据结构的扩展
使得代码更符合“单一职责原则”,因为每个访问者只关心一种操作如果数据结构变化频繁,修改访问者可能成为负担
易于扩展新的操作而不影响原有代码复杂的系统中,访问者可能会增多,导致难以维护

🧩 Python 示例:图形绘制应用

假设有一个图形库,包含多个不同的形状:圆形矩形,我们希望能够对这些图形进行多个操作,例如计算面积、计算周长等。使用访问者模式可以实现动态增加新的操作,而不需要修改已有的图形类。

🎯 1️⃣ 图形接口(Shape)

from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef accept(self, visitor):pass
  • Shape 是所有图形的抽象类,定义了 accept() 方法,接受一个访问者对象来执行特定的操作。

🎯 2️⃣ 具体图形类(Concrete Shapes)

class Circle(Shape):def __init__(self, radius):self.radius = radiusdef accept(self, visitor):visitor.visit_circle(self)class Rectangle(Shape):def __init__(self, width, height):self.width = widthself.height = heightdef accept(self, visitor):visitor.visit_rectangle(self)
  • CircleRectangle 类是具体的图形类,分别代表圆形和矩形。
  • 每个图形类都实现了 accept() 方法,接受一个访问者,并将自身传递给访问者进行操作。

🎯 3️⃣ 访问者接口(Visitor)

class Visitor(ABC):@abstractmethoddef visit_circle(self, circle: Circle):pass@abstractmethoddef visit_rectangle(self, rectangle: Rectangle):pass
  • Visitor 类是一个抽象类,定义了每个图形类的访问方法。例如,visit_circle() 用于访问 Circle 对象,visit_rectangle() 用于访问 Rectangle 对象。

🎯 4️⃣ 具体访问者(Concrete Visitor)

class AreaVisitor(Visitor):def visit_circle(self, circle: Circle):# 计算圆形面积print(f"Area of Circle: {3.14 * circle.radius ** 2}")def visit_rectangle(self, rectangle: Rectangle):# 计算矩形面积print(f"Area of Rectangle: {rectangle.width * rectangle.height}")class PerimeterVisitor(Visitor):def visit_circle(self, circle: Circle):# 计算圆形周长print(f"Perimeter of Circle: {2 * 3.14 * circle.radius}")def visit_rectangle(self, rectangle: Rectangle):# 计算矩形周长print(f"Perimeter of Rectangle: {2 * (rectangle.width + rectangle.height)}")
  • AreaVisitorPerimeterVisitor 是具体的访问者类,分别用于计算图形的面积和周长。
  • 它们实现了 Visitor 接口的 visit_circle()visit_rectangle() 方法。

🎯 5️⃣ 客户端代码(执行操作)

# 创建图形
circle = Circle(5)
rectangle = Rectangle(4, 6)# 创建访问者
area_visitor = AreaVisitor()
perimeter_visitor = PerimeterVisitor()# 执行操作
circle.accept(area_visitor)  # 计算圆形的面积
circle.accept(perimeter_visitor)  # 计算圆形的周长rectangle.accept(area_visitor)  # 计算矩形的面积
rectangle.accept(perimeter_visitor)  # 计算矩形的周长
  • 我们创建了 CircleRectangle 两个图形对象。
  • 我们还创建了两个访问者:AreaVisitorPerimeterVisitor,用于计算图形的面积和周长。
  • 通过 accept() 方法,图形对象将自己传递给访问者,访问者执行相应的操作。

输出结果

Area of Circle: 78.5
Perimeter of Circle: 31.400000000000002
Area of Rectangle: 24
Perimeter of Rectangle: 20
  • AreaVisitor 计算了圆形和矩形的面积。
  • PerimeterVisitor 计算了圆形和矩形的周长。

🧭 类图(Mermaid)

接受
接受
«interface»
Shape
+accept(visitor: Visitor)
Circle
+accept(visitor: Visitor)
Rectangle
+accept(visitor: Visitor)
«interface»
Visitor
+visit_circle(circle: Circle)
+visit_rectangle(rectangle: Rectangle)
AreaVisitor
+visit_circle(circle: Circle)
+visit_rectangle(rectangle: Rectangle)
PerimeterVisitor
+visit_circle(circle: Circle)
+visit_rectangle(rectangle: Rectangle)

🧭 流程图(Mermaid)

User Circle Rectangle AreaVisitor PerimeterVisitor accept(AreaVisitor) visit_circle(Circle) "Area of Circle: 78.5" accept(PerimeterVisitor) visit_circle(Circle) "Perimeter of Circle: 31.4" accept(AreaVisitor) visit_rectangle(Rectangle) "Area of Rectangle: 24" accept(PerimeterVisitor) visit_rectangle(Rectangle) "Perimeter of Rectangle: 20" User Circle Rectangle AreaVisitor PerimeterVisitor

🧠 应用场景总结

场景示例
计算、处理复杂对象例如计算复合图形的面积和周长
扩展现有类的功能在不改变原始类的情况下添加新的操作
对象结构不常变化,但操作可能变化比如一个系统中对象结构不变,但可能需要动态改变操作行为

总结口诀

访问者模式
✅ 将操作封装到独立的访问者类中,避免修改原有类结构,符合开闭原则。
✅ 适用于需要在一个不常变化的对象结构上,动态增加新操作的场景。


如果你对访问者模式有其他问题或想了解更多细节,欢迎继续提问!

http://www.dtcms.com/wzjs/139230.html

相关文章:

  • qq网站推广代码seo搜索铺文章
  • 动态网站没有数据库怎么做注册域名后怎么建网站
  • 下载企业网站搜索引擎优化关键词选择的方法有哪些
  • 国外经典手机网站设计来宾网站seo
  • 文学类网站怎么做网站设计与制作毕业论文范文
  • 卖一手房做哪个网站好外链官网
  • web建立虚拟网站百度热搜榜怎么打开
  • 山东宏福建设集团有限公司网站小红书sem是什么意思
  • 网站导航怎么设置十句经典广告语
  • 做网站建设本地推广最好用的平台
  • 网站运营与推广计划书怎么做收录网站的平台有哪些
  • wordpress 已安装主题seo二级目录
  • 湖南营销型网站建设 干净磐石网络营销方式和渠道有哪些
  • 电商网站零售客户google推广教程
  • 自动化设计网站建设软文网站
  • 做的网站域名劫持龙华网站建设
  • 济宁网站建设注册网站怎么注册
  • 网站banner内容奉节县关键词seo排名优化
  • 内涵图网站源码seo是什么职业
  • 小程序服务器可以做网站吗seo系统培训
  • 厦门免费网站建设东莞做网站的联系电话
  • wordpress 前台 用户长沙网站seo方法
  • 网站鼠标的各种效果怎么做的seo关键词推广方式
  • 在线做维恩图的生物信息学网站网络服务提供者不履行法律行政法规规定
  • 免费域名注册和免费建站专业竞价托管哪家好
  • 为什么网站要备案自己怎么做网址
  • 北京网站设计开发公司长沙seo推广外包
  • 金山网站建设武汉百度快照优化排名
  • 网站管理维护怎么做nba最新比赛直播
  • 国家高新区网站建设湖南关键词优化快速