⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waitress.hpp

📁 深入浅出设计模式(书配套c++源代码)。包含20个设计模式的c++实现。
💻 HPP
字号:
#ifndef	_HFDP_CPP_ITERATOR_DINER_MERGER_I_WAITRESS_HPP_#define _HFDP_CPP_ITERATOR_DINER_MERGER_I_WAITRESS_HPP_namespace HeadFirstDesignPatterns {namespace Iterator {namespace DinerMergerI {class Waitress{     	Menu* _pancakeHouseMenu;	Menu* _dinerMenu; 	private: Waitress( const Waitress& ); // Disable copy constructor	private: void operator=( const Waitress& ); // Disable assignment operator	public: Waitress( Menu* pancakeHouseMenu, Menu* dinerMenu ) :		_pancakeHouseMenu( pancakeHouseMenu ), _dinerMenu( dinerMenu ) { assert( pancakeHouseMenu ); assert( dinerMenu );	}	public: void printMenu() {		Iterator<MenuItem>* pancakeIterator = _pancakeHouseMenu->createIterator();		Iterator<MenuItem>* dinerIterator = _dinerMenu->createIterator();		std::cout << "MENU\n----\nBREAKFAST" << std::endl;		printMenu( pancakeIterator );		std::cout << "\nLUNCH" << std::endl;		printMenu( dinerIterator );	}	private: void printMenu( Iterator<MenuItem>* iterator ) { assert( iterator );		while( iterator->hasNext() ) {			MenuItem* menuItem = dynamic_cast< MenuItem* >( iterator->next() );			std::cout << menuItem->getName() << ", ";			std::cout << menuItem->getPrice() << " -- ";			std::cout << menuItem->getDescription() << std::endl;		}	} 	public: void printVegetarianMenu() {		std::cout << "\nVEGETARIAN MENU\n----\nBREAKFAST" << std::endl;		printVegetarianMenu( _pancakeHouseMenu->createIterator() );		std::cout << "\nLUNCH" << std::endl;		printVegetarianMenu( _dinerMenu->createIterator() );	} 	public: bool isItemVegetarian( std::string name ) {		Iterator<MenuItem>* pancakeIterator = _pancakeHouseMenu->createIterator();		if( isVegetarian(name, pancakeIterator) ) {			return true;		}		Iterator<MenuItem>* dinerIterator = _dinerMenu->createIterator();		if( isVegetarian(name, dinerIterator) ) {			return true;		}		return false;	}	private: void printVegetarianMenu( Iterator<MenuItem>* iterator ) const { assert( iterator );		while( iterator->hasNext() ) {			MenuItem* menuItem = dynamic_cast< MenuItem* >(iterator->next() );			if( menuItem->isVegetarian() ) {				std::cout << menuItem->getName() << ", ";				std::cout << menuItem->getPrice() << " -- ";				std::cout << menuItem->getDescription() << std::endl;			}		}	}	private: bool isVegetarian( std::string name, Iterator<MenuItem>* iterator) const { assert(iterator);		while( iterator->hasNext() ) {			MenuItem* menuItem = iterator->next();			if( menuItem->getName().compare( name ) == 0 ) {				if( menuItem->isVegetarian() ) {					return true;				}			}		}		return false;	}};} // namespace DinerMergerI} // namespace Iterator} // namespace HeadFirstDesignPatterns#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -