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

ip下的网站吗网站做不做301

ip下的网站吗,网站做不做301,怎么把qq空间做成企业网站,邢台招标网文章目录 前言一、访问者模式二、访问者模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间的组…

文章目录

  • 前言
  • 一、访问者模式
  • 二、访问者模式示例


前言

GOF设计模式分三大类:

  • 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
  • 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
  • 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

一、访问者模式

访问者模式(Visitor Pattern)

  • 定义:提供一个作用于某对象结构中的各元素的操作表示,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

  • 解决问题:如何操作一个包含多种类型对象的复杂结构?

  • 使用场景:

    • 当系统中存在一个较为复杂的对象结构,且不同访问者对其所采取的操作也不相同时,可以考虑使用访问者模式进行设计。
    • 一个对象结构包含多种类型的对象,希望对这些对象实施一些依赖其具体类型的操作。在访问者中针对每一种具体的类型都提供了一个访问操作,不同类型的对象可以有不同的访问操作。
  • 组成:

    • Visitor(抽象访问者):抽象访问者为对象结构中每个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型。
    • ConcreteVisitor(具体访问者):具体访问者实现了每个由抽象访问者声明的操作,每个操作用于访问对象结构中一种类型的元素。
    • Element(抽象元素):定义一个accept()方法,该方法通常以一个抽象访问者作为参数。
    • ConcreteElement(具体元素):具体元素实现了accept()方法,在accept()方法中调用访问者的访问方法以便完成对一个元素的操作。
    • ObjectStructure(对象结构):对象结构是一个元素的集合,它用于存放元素对象,并且提供了遍历其内部元素的方法。
  • 补充说明:

    • 访问者模式,包含访问者和被访问元素两个主要组成部分。
    • 这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。
    • 被访问的元素通常存储在一个集合中,这个集合称为“对象结构”。访问者通过遍历对象结构实现对其中存储的元素的逐个操作。
    • 访问者模式包括两个层次结构:一个是访问者层次结构,提供了抽象访问者和具体访问者;另一个是元素层次结构,提供了抽象元素和具体元素。
  • 优点:

    • 增加新的访问操作很方便。
    • 将有关元素对象的访问行为集中到一个访问者对象中,而不是分散在一个个的元素类中。类的职责更加清晰。
  • 缺点:

    • 增加新的元素类很困难。
    • 破坏封装。

在这里插入图片描述

二、访问者模式示例

使用访问者模式,设计系统中员工数据汇总模块

  • 员工包括正式员工和临时工,每周人力资源部和财务部等部门需要对员工数据进行汇总。人力资源部负责汇总每周员工工作时间,而财务部负责计算每周员工工资。
    • 正式员工每周工作时间为40小时。不同级别、不同部门的员工每周基本工资不同。如果超过40小时,超出部分按照100元/小时作为加班费;如果少于40小时,所缺时间按照请假处理,请假所扣工资以80元/小时计算,直到基本工资扣除到零为止。
    • 临时工每周工作时间不固定。基本工资按小时计算,不同岗位的临时工小时工资不同。
  • FADepartment表示财务部,HRDepartment表示人力资源部,它们充当具体访问者角色,其抽象父类Department充当抽象访问者角色;
  • EmployeeList充当对象结构,用于存储员工列表;
  • FulltimeEmployee表示正式员工,ParttimeEmployee表示临时工,它们充当具体元素角色,其父接口Employee充当抽象元素角色。
"""访问者模式"""### 抽象访问者class Departement:"""部门"""def visit_fulltime_employee(self, employee: "FulltimeEmployee"):raise NotImplementedErrordef visit_parttime_employee(self, employee: "ParttimeEmployee"):raise NotImplementedError### 具体访问者class Finance(Departement):"""财务部"""def visit_fulltime_employee(self, employee):"""实现财务部对全职员工的访问"""if employee.work_time > 40:employee.weekly_wage = (employee.weekly_wage + (employee.work_time - 40) * 100)else:employee.weekly_wage = (employee.weekly_wage - (40 - employee.work_time) * 100)if employee.weekly_wage < 0:employee.weekly_wage = 0print(f"正式员工:{employee.name},实际工资为:{employee.weekly_wage}")def visit_parttime_employee(self, employee):"""实现人事部对兼职员工的访问"""print(f"兼职员工:{employee.name},实际工资为:{employee.work_time*employee.hourly_wage}")class HR(Departement):"""人事部"""def visit_fulltime_employee(self, employee):"""实现人事部对全职员工的访问"""print(f"正式员工:{employee.name},实际工作时间:{employee.work_time}")if employee.work_time > 40:print(f"正式员工:{employee.name},加班时间为:{employee.work_time - 40}")else:print(f"正式员工:{employee.name},请假时间为:{40-employee.work_time}")def visit_parttime_employee(self, employee):"""实现人事部对兼职员工的访问"""print(f"兼职员工:{employee.name},实际工作时间:{employee.work_time}")### 抽象元素class Employee:"""员工"""def accept(self, handler: Departement):"""接受一个抽象访问者访问"""raise NotImplementedError### 具体元素class FulltimeEmployee(Employee):"""全职员工"""def __init__(self, name: str, weekly_wage: float, work_time: int):self.name = name  # 员工姓名self.weekly_wage = weekly_wage  # 员工周薪self.work_time = work_time  # 工作时间def accept(self, handler):handler.visit_fulltime_employee(self)  # 调用访问者的访问方法class ParttimeEmployee(Employee):"""兼职员工"""def __init__(self, name: str, hourly_wage: float, work_time: int):self.name = name  # 员工姓名self.hourly_wage = hourly_wage  # 员工时薪self.work_time = work_time  # 工作时间def accept(self, handler):handler.visit_parttime_employee(self)  # 调用访问者的访问方法### 对象结构class EmployeeList:"""员工列表"""def __init__(self):self.employees = []def add_employee(self, employee):self.employees.append(employee)def accept(self, departement):for employee in self.employees:employee.accept(departement)def __str__(self):return "\n".join([str(employee) for employee in self.employees])
  • 客户端代码
### 客户端代码
if __name__ == "__main__":employee_list = EmployeeList()employee_list.add_employee(FulltimeEmployee("张三", 5000, 45))employee_list.add_employee(FulltimeEmployee("李四", 6000, 40))employee_list.add_employee(FulltimeEmployee("王五", 7000, 38))employee_list.add_employee(ParttimeEmployee("赵六", 80, 20))employee_list.add_employee(ParttimeEmployee("孙七", 60, 18))dep: Departement = Finance()# 如果需要更换具体访问者类,无须修改源代码,只需修改配置文件。# dep: Departement = HR()employee_list.accept(dep)
  • 输出结果
正式员工:张三,实际工资为:5500
正式员工:李四,实际工资为:6000
正式员工:王五,实际工资为:6800
兼职员工:赵六,实际工资为:1600
兼职员工:孙七,实际工资为:1080
  • 当访问者更换为HR时,输出结果
正式员工:张三,实际工作时间:45
正式员工:张三,加班时间为:5
正式员工:李四,实际工作时间:40
正式员工:李四,请假时间为:0
正式员工:王五,实际工作时间:38
正式员工:王五,请假时间为:2
兼职员工:赵六,实际工作时间:20
兼职员工:孙七,实际工作时间:18

您正在阅读的是《设计模式Python版》专栏!关注不迷路~


文章转载自:

http://AbENLrEL.xcdph.cn
http://0szA6MRP.xcdph.cn
http://7OjsqxxQ.xcdph.cn
http://1yF2Gy7x.xcdph.cn
http://XX84qZvD.xcdph.cn
http://CDOOnRfI.xcdph.cn
http://NMgJdMvb.xcdph.cn
http://FK9Ju4lG.xcdph.cn
http://fnWi1jUz.xcdph.cn
http://tvwow3cT.xcdph.cn
http://yyBVAe5g.xcdph.cn
http://puKFHjWm.xcdph.cn
http://MCxe5y2P.xcdph.cn
http://nW7xreCO.xcdph.cn
http://1dupNS91.xcdph.cn
http://cXx5uers.xcdph.cn
http://Cqvhu5XV.xcdph.cn
http://wceJqSYX.xcdph.cn
http://L2yE8E5h.xcdph.cn
http://DTtMajpt.xcdph.cn
http://37lXWaus.xcdph.cn
http://j0l6s9hm.xcdph.cn
http://XmulSFcn.xcdph.cn
http://i4JZGIM4.xcdph.cn
http://p11IANjd.xcdph.cn
http://GPCXD2LO.xcdph.cn
http://lVxij0hV.xcdph.cn
http://xXLYHCPx.xcdph.cn
http://77F8QoMP.xcdph.cn
http://PzfiAlSi.xcdph.cn
http://www.dtcms.com/wzjs/677999.html

相关文章:

  • 海口制作网站公司网络服务费分录
  • 广州企业网站建设推荐网站网络资源建立
  • 做素材网站服务器检察机关门户网站建设工作自查报告
  • 产业协会建设网站方案怎么样给公司做网站
  • 建设银行网站登录没反应广州市有几个区
  • 网站制作能赚多少钱如何做一网站首页
  • 网站建设样板开发一款手机app软件需要多少钱
  • 阿里云 个人网站自建网站投放广告
  • 怎么让人搜索到自己做的网站php高级网站开发
  • 手机网站做桌面快捷方式凯里网络推广
  • 电子商城网站网站空间支持功能
  • 制作公司网站流程公网主机上做的网站如果访问
  • 做网站用哪个软件好微表单网站
  • 学校网站网页模板网站基本模块
  • 网站建设咨询问卷全国公共建筑信息平台
  • 石大网页设计与网站建设客观题wordpress插件 图片上传
  • 做网站彩票代理多少钱啊fms 视频网站建设
  • 做图标去什么网站找莱芜在线论坛莱芜一中李念学
  • 淄博哪里有做网站的项目组网站建设方案书
  • 东莞做网站卓诚网络客户管理系统的设计与实现
  • win7做网站服务器卡wordpress 站点图标
  • 企业中英文网站开发南京市建设工程档案馆网站
  • 做网站怎么这么贵让自己的网站收录
  • 六兄弟做网站中山商城型网站建设
  • 凡科网网站后台建设谈谈什么是网络营销
  • 论坛网站平台建设方案论坛网站模板免费下载
  • 做外贸翻译用哪个网站好长春网站建设定制
  • 如何在网站上做公示用小程序做网站
  • 微信公众号网站开发本地调试网站建设html
  • 免费网站入口网站免费进简单做网站的软件