CSharp: Visitor Pattern
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | /// <summary> /// Summary description for Employee. /// Visitor Pattern 访问者模式 ///20220918 /// geovindu,Geovin Du,涂聚文 /// </summary> public class Employee { int sickDays, vacDays; float salary; string name; /// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="salary"></param> /// <param name="vDays"></param> /// <param name="sDays"></param> public Employee( string name, float salary, int vDays, int sDays) { this .name = name; this .salary = salary; sickDays = sDays; vacDays = vDays; } /// <summary> /// /// </summary> public string Name { get { return name; } set { name = value; } } /// <summary> /// /// </summary> public float Salary { get { return salary; } set { salary = value; } } /// <summary> /// /// </summary> public int SickDays { get { return sickDays; } set { sickDays = value; } } /// <summary> /// /// </summary> public int VacDays { get { return vacDays; } set { vacDays = value; } } /// <summary> /// /// </summary> /// <returns></returns> public string getName() { return name; } /// <summary> /// /// </summary> /// <returns></returns> public int getSickDays() { return sickDays; } /// <summary> /// /// </summary> /// <returns></returns> public int getVacDays() { return vacDays; } /// <summary> /// /// </summary> /// <returns></returns> public float getSalary() { return salary; } /// <summary> /// /// </summary> /// <param name="v"></param> public virtual void accept(Visitor v) { v.visit( this ); } /// <summary> /// /// </summary> /// <returns></returns> public string toString() { return name + "," + salary.ToString() + "," + sickDays.ToString() + "," + vacDays.ToString() + "" ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /// <summary> /// Summary description for Visitor. /// Visitor Pattern 访问者模式 ///20220918 /// geovindu,Geovin Du,涂聚文 /// </summary> public abstract class Visitor { /// <summary> /// /// </summary> /// <param name="emp"></param> public abstract void visit(Employee emp); /// <summary> /// /// </summary> /// <param name="bos"></param> public abstract void visit(Boss bos); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /// <summary> /// Summary description for Manager.\ /// Visitor Pattern 访问者模式 ///20220918 /// geovindu,Geovin Du,涂聚文 /// </summary> public class Manager : Employee { private int bonusDays; /// <summary> /// /// </summary> /// <param name="nm"></param> /// <param name="slry"></param> /// <param name="vDays"></param> /// <param name="sDays"></param> public Manager( string nm, float slry, int vDays, int sDays) : base (nm, slry, vDays, sDays) { } /// <summary> /// /// </summary> /// <param name="bd"></param> public void setBonusDays( int bd) { bonusDays = bd; } /// <summary> /// /// </summary> /// <returns></returns> public int getBonusDays() { return bonusDays; } /// <summary> /// /// </summary> /// <param name="v"></param> public override void accept(Visitor v) { v.visit( this ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /// <summary> /// Summary description for Boss. /// Visitor Pattern 访问者模式 ///20220918 /// geovindu,Geovin Du,涂聚文 /// </summary> public class Boss : Employee { private int bonusDays; /// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="salary"></param> /// <param name="vdays"></param> /// <param name="sdays"></param> public Boss( string name, float salary, int vdays, int sdays) : base (name, salary, vdays, sdays) { } /// <summary> /// /// </summary> /// <param name="bdays"></param> public void setBonusDays( int bdays) { bonusDays = bdays; } /// <summary> /// /// </summary> /// <returns></returns> public int getBonusDays() { return bonusDays; } /// <summary> /// /// </summary> /// <param name="v"></param> public override void accept(Visitor v) { v.visit( this ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /// <summary> /// Summary description for VacationVisitor. /// Visitor Pattern 访问者模式 ///20220918 /// geovindu,Geovin Du,涂聚文 /// </summary> public class VacationVisitor : Visitor { private int totalDays; /// <summary> /// /// </summary> public VacationVisitor() { totalDays = 0; } /// <summary> /// /// </summary> /// <returns></returns> public int getTotalDays() { return totalDays; } /// <summary> /// /// </summary> /// <param name="emp"></param> public override void visit(Employee emp) { totalDays += emp.getVacDays(); } /// <summary> /// /// </summary> /// <param name="bos"></param> public override void visit(Boss bos) { totalDays += bos.getVacDays(); } } |
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | /// <summary> /// Visitor Pattern 访问者模式 ///20220918 /// geovindu,Geovin Du,涂聚文 /// </summary> public partial class VisitorPatternForm : Form { private List<Employee> empls; private Employee empl; private Boss bos; /// <summary> /// /// </summary> private void init() { int i = 0; empls = new List<Employee>(); empl = new Employee( "Susan Bear" , 55000, 12, 1); empls.Add(empl); empl = new Employee( "Adam Gehr" , 150000, 9, 0); empls.Add(empl); empl = new Employee( "Fred Harris" , 50000, 15, 2); empls.Add(empl); empl = new Employee( "David Oakley" , 57000, 12, 2); empls.Add(empl); empl = new Employee( "Larry Thomas" , 100000, 20, 6); empls.Add(empl); bos = new Boss( "Leslie Susi" , 175000, 16, 4); empls.Add(empl); bos.setBonusDays(12); empls.Add(bos); bos = new Boss( "Laurence Byerly" , 35000, 17, 6); bos.setBonusDays(17); empls.Add(bos); } /// <summary> /// /// </summary> public VisitorPatternForm() { InitializeComponent(); init(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void VisitorPatternForm_Load( object sender, EventArgs e) { this .dataGridView1.DataSource = empls; } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btCompute_Click( object sender, EventArgs e) { VacationVisitor vac = new VacationVisitor(); VacationVisitor bvac = new VacationVisitor(); for ( int i = 0; i < empls.Count; i++) { empls[i].accept(vac); //get the employee empls[i].accept(bvac); } lsVac.Items.Add( "Total vacation days=" + vac.getTotalDays().ToString()); lsVac.Items.Add( "Total boss vacation days=" + bvac.getTotalDays().ToString()); this .dataGridView1.DataSource = empls; } } |
输出:
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
CSharp code
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!