访问者模式之C++实现
来源:互联网 发布:质量数据分析管理办法 编辑:程序博客网 时间:2024/06/18 15:19
看了Java实现的访问者模式,将其用C++重新实现,比较,可知为什么设计模式在Java中更加简单,这也就是为什么几乎所有关于设计模式的书都是Java实现。因为资源自动化管理可以更加突出重点。还有,C++的细节太多了,稍不小心就出问题,比如基类里要带一个虚的析构函数,还得有实现体,如果照抄Java的,惨了,资源泄漏,具体可参加 effective C++:
// app.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <boost/bind.hpp>#include <iostream>#include <list>#include <algorithm>using namespace std;class Apple;class Book;class visitor{public: virtual void visit (Apple* apple) = 0; virtual void visit (Book* book) = 0; virtual ~visitor ( ) {};};class Product{public: virtual void accept (visitor* v) = 0; virtual ~Product ( ) {}};class Apple : public Product{ // Inherited via Product virtual void accept (visitor * v) override { v->visit (this); } ~Apple() { std::cout << "~Apple()" << std::endl; }};class Book : public Product{ // Inherited via Product virtual void accept (visitor * v) override { v->visit (this); }};class customer : public visitor{ // Inherited via visitor virtual void visit (Apple * apple) override { std::cout << "客户买苹果" << std::endl; } virtual void visit (Book * book) override { std::cout << "客户买书" << std::endl; }};class sale : public visitor{ // Inherited via visitor virtual void visit (Apple * apple) override { std::cout << "销售卖苹果" << std::endl; } virtual void visit (Book * book) override { std::cout << "销售卖书" << std::endl; }};class prodectList{ typedef std::list<Product*> container; container m_list;public: void add(Product* p) { m_list.push_back (p); } void remove(Product* p) { m_list.remove (p); } void visit(visitor* v) { container::iterator it = m_list.begin ( ); for (; it != m_list.end ( ); ++it) (*it)->accept (v); } void free(Product* p) { if(p) delete p; } ~prodectList() { std::for_each (m_list.begin ( ), m_list.end ( ),boost::bind(&prodectList::free,this,_1)); }};int main(int argc, char* argv[]){ customer cu; sale sa; prodectList list; list.add (new Apple); list.add (new Apple); list.add (new Book); list.visit (&cu); std::cout << std::endl; list.visit (&sa);return 0;}
0 0
- 访问者模式之C++实现
- 设计模式之访问者模式,C++实现
- 设计模式之访问者模式,C++实现
- scala实现设计模式之访问者模式
- 行为型模式之访问者模式实现
- 【C++】Chapter24:访问者模式
- Objective C--访问者模式
- Objevtive C 访问者模式
- Objective C--访问者模式
- 访问者模式lua实现
- 《大话设计模式》java实现之访问者模式
- 设计模式之访问者
- 设计模式之访问者
- 实现设计模式:访问者模式
- 设计模式之访问者模式
- 设计模式之--访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- URAL 1204. Idempotents 扩展欧几里德
- Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。
- 《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)(精)
- vim显示行号、语法高亮、自动缩进的设置
- PROC系列之---/proc/pid/stat
- 访问者模式之C++实现
- Next Permutation
- top命令详解
- uva 10012
- Merge Intervals 合并区间
- CF377B Preparing for the Contest [贪心+优先队列]
- liunx下lnmp环境安装
- A20内核编译错误undefined reference to `hwmon_device_register'
- 等腰三角形