学习笔记:visitor模式和双分派
来源:互联网 发布:windows xp iis配置 编辑:程序博客网 时间:2024/05/16 04:09
#include "stdafx.h"#include <iostream>using namespace std;class CEmployee;class CProgrammer;class CManager;class CCEO;class IVisitor{public: virtual void Visit(CEmployee* p) = 0; virtual void Visit(CProgrammer* p) = 0; virtual void Visit(CManager* p) = 0; virtual void Visit(CCEO* p) = 0;};class CEmployee {public: virtual void Accept(IVisitor *v)=0; virtual int getSalary(){ return 0; }};class CProgrammer : public CEmployee{public: virtual void Accept(IVisitor *v){ v->Visit(this); } virtual int getSalary(){ return 100; } };class CJuniorProgrammer : public CEmployee{public: virtual void Accept(IVisitor *v){ v->Visit(this); } virtual int getSalary(){ return 500; } };class CVeteranProgrammer : public CEmployee{public: virtual void Accept(IVisitor *v){ v->Visit(this); } virtual int getSalary(){ return 1000; } };class CManager : public CEmployee{public: virtual void Accept(IVisitor *v){ v->Visit(this); } virtual int getSalary(){ return 1000; } int getBonus(){ return 1000; }};class CCEO : public CEmployee{public: virtual void Accept(IVisitor *v){ v->Visit(this); } int yearly_salary(){ return 120000; }};class SalaryVisitor:public IVisitor{public: SalaryVisitor():sum_(0){} virtual void Visit(CEmployee* p){ sum_ += p->getSalary(); } virtual void Visit(CProgrammer* p){ sum_ += p->getSalary(); } virtual void Visit(CManager* p){ sum_ += p->getSalary(); sum_ += p->getBonus(); } virtual void Visit(CCEO* p){ sum_ += (p->yearly_salary() / 12); }public: int GetTotalSalary(){ return sum_; }private: int sum_;};//优点:CEmployee继承体系基本不会被冲击。如果SalaryVisitor算法有问题,只是更改SalaryVisitor即可。需要预先在CEmployee继承体系嵌入virtual void Accept(IVisitor *v)=0;,如果不让动旧代码,此模式失败。如果增加新的雇员类型,就需要动IVisitor。同理,必将引起底层代码重编译。int main() { IVisitor* pv = new SalaryVisitor(); CEmployee* pe = new CCEO(); pe->Accept(pv); return 0;}
0 0
- 学习笔记:visitor模式和双分派
- 学习笔记:动态分派和静态分派
- 也谈double dispatch(双分派)::Visitor 模式(转)
- 设计模式学习笔记--访问者(Visitor)模式
- Visitor模式-数据主体需要稳定/相互关联三部分组成实现双分派或多分派
- 学习笔记:用于事件多路分离和分派的reactor体系结构模式
- 双分派 和 访问者模式详解
- 设计模式学习笔记二十四(Visitor访问者模式)
- 设计模式学习笔记(二十)—Visitor访问者模式
- 设计模式学习笔记——访问者(Visitor)模式
- 双分派模式
- Flex学习笔记02 事件监听和分派
- 笔记:Gof设计模式--Visitor
- Java设计模式(三) Visitor(访问者)模式及多分派场景应用
- Java设计模式(三) Visitor(访问者)模式及多分派场景应用
- 设计模式学习19 Visitor
- Visitor设计模式--学习总结
- 访问者模式与双分派
- mschart的添加
- Android 开发笔记——通过 Intent 传递类对象
- ACM新得适合新手
- C语言程序设计实验题3.11 彩色链子
- Win8/Win8.1安装分区(C盘)根目录中的swapfile.sys文件是干什么用的?
- 学习笔记:visitor模式和双分派
- 经典算法】A星算法详解
- 【Cocos2d-x 3.x教程】如何基于Cocos2d-x v3.x实现A星寻路算法
- C语言程序设计实验题3.12小明的手表
- 【cocos2d-js教程】cocos2d-js中使用cocosbuilder绑定变量和Selector
- mvc下的模型验证与modelsate/modelstate.Clear()
- 哈夫曼编码
- 南昌大学50名女生隐私网上曝光
- 女上司邀我上床领年终红包是不是开心?