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

头像制作网站高端网吧电脑配置清单

头像制作网站,高端网吧电脑配置清单,创意+wordpress主题,宜昌最权威网站建设公司1. 什么是访问者模式? 访问者模式是一种行为设计模式,它允许你在不改变对象结构的前提下,定义新的操作。通过将操作封装在访问者对象中,访问者模式使得你可以在不修改元素类的情况下,向元素类添加新的功能。 访问者模…

1. 什么是访问者模式?

访问者模式是一种行为设计模式,它允许你在不改变对象结构的前提下,定义新的操作。通过将操作封装在访问者对象中,访问者模式使得你可以在不修改元素类的情况下,向元素类添加新的功能。

访问者模式的核心思想是将操作与对象结构分离。通过引入一个访问者对象,允许你在不修改对象结构的情况下,定义新的操作。这样可以提高系统的灵活性和可扩展性。

访问者模式通常包含以下几个组成部分:

  • 访问者接口(Visitor Interface):定义访问者的接口,通常包含对每个元素类的访问方法。
  • 具体访问者(Concrete Visitor):实现访问者接口,定义对每个元素类的具体操作。
  • 元素接口(Element Interface):定义接受访问者的接口,通常包含一个接受访问者的方法。
  • 具体元素(Concrete Element):实现元素接口,定义具体的元素类。

访问者模式在软件设计中具有多种优点:

  • 分离操作与对象结构:通过将操作封装在访问者中,访问者模式使得操作与对象结构分离,增强了系统的灵活性。
  • 易于扩展:可以通过添加新的访问者来扩展系统的功能,而不需要修改现有的元素类。
  • 集中操作:所有操作都集中在访问者中,便于管理和维护。
# 访问者接口
class DiscountVisitor:def visit_book(self, book):passdef visit_electronic(self, electronic):pass# 具体访问者
class PercentageDiscount(DiscountVisitor):def visit_book(self, book):return book.price * 0.9  # 书籍享受10%的折扣def visit_electronic(self, electronic):return electronic.price * 0.85  # 电子产品享受15%的折扣# 元素接口
class Item:def accept(self, visitor):pass# 具体元素
class Book(Item):def __init__(self, price):self.price = pricedef accept(self, visitor):return visitor.visit_book(self)  # 接受访问者class Electronic(Item):def __init__(self, price):self.price = pricedef accept(self, visitor):return visitor.visit_electronic(self)  # 接受访问者# 客户端代码
if __name__ == "__main__":items = [Book(100), Electronic(200)]  # 创建购物车中的商品discount_visitor = PercentageDiscount()  # 创建折扣访问者for item in items:discounted_price = item.accept(discount_visitor)  # 计算折扣后的价格print(f"Discounted price: {discounted_price}")
  1. 访问者接口DiscountVisitor 类定义了访问者的接口,包含对每个元素类的访问方法(visit_bookvisit_electronic)。
  2. 具体访问者
    • PercentageDiscount 类实现了访问者接口,定义了对每个元素类的具体操作(计算折扣后的价格)。
    • visit_book 方法中,书籍享受10%的折扣;在 visit_electronic 方法中,电子产品享受15%的折扣。
  3. 元素接口Item 类定义了接受访问者的接口,包含一个 accept 方法。
  4. 具体元素
    • BookElectronic 类实现了元素接口,定义具体的商品类,并实现 accept 方法,接受访问者。
  5. 客户端代码
    • 在客户端代码中,创建购物车中的商品和折扣访问者,并通过调用 accept 方法来计算折扣后的价格。

2. 示例1:宠物店中的访问者模式

  • 访问者接口(Visitor Interface):定义访问者的接口,通常包含对每个宠物类的访问方法。
  • 具体访问者(Concrete Visitor):实现访问者接口,定义对每个宠物类的具体操作(如计算数量、平均体重和最大年龄)。
  • 元素接口(Element Interface):定义接受访问者的接口,通常包含一个接受访问者的方法。
  • 具体元素(Concrete Element):实现元素接口,定义具体的宠物类(如猫和狗)。
# 访问者接口
class PetVisitor:def visit_cat(self, cat):passdef visit_dog(self, dog):pass# 具体访问者:数量统计
class CountVisitor(PetVisitor):def __init__(self):self.cat_count = {'male': 0, 'female': 0}self.dog_count = {'male': 0, 'female': 0}def visit_cat(self, cat):self.cat_count[cat.gender] += 1def visit_dog(self, dog):self.dog_count[dog.gender] += 1def report(self):print(f"Cat Count: {self.cat_count['male']} males, {self.cat_count['female']} females")print(f"Dog Count: {self.dog_count['male']} males, {self.dog_count['female']} females")# 具体访问者:平均体重计算
class WeightVisitor(PetVisitor):def __init__(self):self.total_cat_weight = 0self.total_dog_weight = 0self.cat_count = 0self.dog_count = 0def visit_cat(self, cat):self.total_cat_weight += cat.weightself.cat_count += 1def visit_dog(self, dog):self.total_dog_weight += dog.weightself.dog_count += 1def report(self):avg_cat_weight = self.total_cat_weight / self.cat_count if self.cat_count > 0 else 0avg_dog_weight = self.total_dog_weight / self.dog_count if self.dog_count > 0 else 0print(f"Average Cat Weight: {avg_cat_weight:.2f} kg")print(f"Average Dog Weight: {avg_dog_weight:.2f} kg")# 具体访问者:最大年龄查找
class AgeVisitor(PetVisitor):def __init__(self):self.max_cat_age = 0self.max_dog_age = 0def visit_cat(self, cat):if cat.age > self.max_cat_age:self.max_cat_age = cat.agedef visit_dog(self, dog):if dog.age > self.max_dog_age:self.max_dog_age = dog.agedef report(self):print(f"Oldest Cat Age: {self.max_cat_age} years")print(f"Oldest Dog Age: {self.max_dog_age} years")# 具体元素:猫
class Cat:def __init__(self, gender, weight, age):self.gender = gender  # 'male' or 'female'self.weight = weight  # 体重self.age = age  # 年龄def accept(self, visitor):visitor.visit_cat(self)  # 接受访问者# 具体元素:狗
class Dog:def __init__(self, gender, weight, age):self.gender = gender  # 'male' or 'female'self.weight = weight  # 体重self.age = age  # 年龄def accept(self, visitor):visitor.visit_dog(self)  # 接受访问者# 客户端代码
if __name__ == "__main__":pets = [Cat('male', 4.5, 3),Cat('female', 3.0, 2),Dog('male', 10.0, 5),Dog('female', 8.5, 4),Cat('male', 5.0, 6),Dog('female', 9.0, 7)]count_visitor = CountVisitor()  # 创建数量统计访问者weight_visitor = WeightVisitor()  # 创建平均体重计算访问者age_visitor = AgeVisitor()  # 创建最大年龄查找访问者# 统计数量、计算平均体重和查找最大年龄for pet in pets:pet.accept(count_visitor)  # 统计数量pet.accept(weight_visitor)  # 计算平均体重pet.accept(age_visitor)  # 查找最大年龄# 输出统计结果count_visitor.report()weight_visitor.report()age_visitor.report()
Cat Count: 2 males, 1 females
Dog Count: 1 males, 2 females
Average Cat Weight: 4.17 kg
Average Dog Weight: 9.17 kg
Oldest Cat Age: 6 years
Oldest Dog Age: 7 years
  1. 访问者接口PetVisitor 类定义了访问者的接口,包含对每个宠物类的访问方法(visit_catvisit_dog)。

  2. 具体访问者

    • CountVisitor 类实现了访问者接口,负责统计宠物的数量(按性别分类)。
    • WeightVisitor 类实现了访问者接口,负责计算宠物的平均体重。
    • AgeVisitor 类实现了访问者接口,负责找出年龄最大的猫和狗。
  3. 具体元素

    • CatDog 类实现了元素接口,定义具体的宠物类,并实现 accept 方法,接受访问者。
  4. 客户端代码

    • 在客户端代码中,创建宠物对象(猫和狗)并创建数量统计、平均体重计算和最大年龄查找的访问者。
    • 通过调用 accept 方法,分别统计数量、计算平均体重和查找最大年龄,并打印结果。

文章转载自:

http://IroMc0wJ.wrcym.cn
http://WbKynBcy.wrcym.cn
http://jyLUIcBg.wrcym.cn
http://ddpjrmFG.wrcym.cn
http://buYTxsm4.wrcym.cn
http://n2R0Svp6.wrcym.cn
http://OkL6Onkv.wrcym.cn
http://soPrt8hp.wrcym.cn
http://rMVAnLNA.wrcym.cn
http://iojq3ODQ.wrcym.cn
http://L1VaJfwg.wrcym.cn
http://IWK8v2Yd.wrcym.cn
http://ZdXuR2DC.wrcym.cn
http://cZoqqJuS.wrcym.cn
http://Q8xfmSKP.wrcym.cn
http://y5q4xRuQ.wrcym.cn
http://zPX0DvaJ.wrcym.cn
http://OAPm7RM9.wrcym.cn
http://n03XWwOD.wrcym.cn
http://YkLju2Ri.wrcym.cn
http://tD3NISVb.wrcym.cn
http://UHJZjFiv.wrcym.cn
http://WLp0S9iG.wrcym.cn
http://SlK0tu4n.wrcym.cn
http://GgEaIOsV.wrcym.cn
http://YEpihO1m.wrcym.cn
http://ctbNvfHE.wrcym.cn
http://G5X3qsf2.wrcym.cn
http://4SXiiy73.wrcym.cn
http://r0EaXOLu.wrcym.cn
http://www.dtcms.com/wzjs/696686.html

相关文章:

  • 网文网站排名泰安网红金火火
  • 做网站定金是多少网站建设得缺点
  • 网站集约化建设 技术京东的网站是哪家公司做的
  • 青海网站开发 建设网银网站建设银行
  • 杭州做代发的网站有哪些劳务公司简介模板
  • 盘州住房和城乡建设局网站frontpage可以做网站吗
  • 网站建设与管理规定建站公司网站论坛
  • 专门做奢侈品的网站有哪些网络规划设计师教材
  • 以前做视频的网站吗淘宝商城正品
  • 做网站设计用什么软件最好网站怎么看被百度收录
  • 翡翠原石网站首页怎么做廊坊小程序公司
  • 建设网站费怎么入账万户网络是上市公司吗
  • 网站 中国最早做网站的山东泰安昨晚发生的事
  • 西安杰商网络网站建设网站建设和管理规则
  • 长沙环路建设开发有限公司网站数商云医药
  • 怎么注册一个公司网站品牌建设有哪些方面
  • 网站开发费用报价单宁夏百度seo
  • 做网站百度推广多少钱手机网站的优势
  • 邹带芽在成武建设局网站下面有关网络营销特点的论述正确的有
  • 徐州专业网站建设旅游企业做网站主要目的
  • 做网站商城前景怎么样软文推广方法
  • 网站建站外包公司好听的公司名称
  • 手机全部网站那个网站可以做logo
  • 网站后台乱码怎么办wordpress更新很慢
  • 公司网站 seo龙岩城乡建设局网站
  • 企业自己怎么制作网站首页嘉兴外贸网站建设
  • 平顶山网站建设服务公司承包活应该上什么平台
  • 怎样建设网络游戏网站网站备案无前置审批文件
  • 分类信息网站怎么做流量百度推广电话
  • 建立一个团购网站需要多少钱免费主题大全软件下载