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

📄 factory_lab.cpp

📁 设计模式
💻 CPP
字号:
// Purpose.  Abstract Factory design pattern lab.// // Problem.  #ifdef case statements are spread throughout the code to// accomodate 3 different porting targets.  This makes maintenance// difficult, and porting to a 4th platform onerous.// // Assignment.// o Create an abstract base class Factory.// o Define pure virtual member functions createSocket(), createPipe(),//   and createThread().// o Subclass UnixFactory, VmsFactory, and NtFactory off of Factory.
// o Refactor the "create" free functions to be member functions of one of
//   the Factory derived classes.// o Declare a Factory* pointer local to main().// o Use a single #ifdef case statement in main() to instantiate the desired//   Factory derived class.// o Do not optimize-out the doOneLaneIPC(), doTwoLaneIPC(), and//   doParallelProcessing() free functions.// o Pass the Factory pointer to each of these free functions so that they//   can create sockets, pipes, and threads without regard to race, creed,//   or platform.// o Supply the desired "compiler directive" at compile time.// o Extra credit: implement the Factory class as a Singleton.#include <iostream.h>
#define NULL 0class Factory {
public:
	virtual void createSocket() = 0 {}
	virtual void createPipe() = 0 {}
	virtual void createThread() = 0 {}
};
class UnixFactory : public Factory {
public:
	void createSocket()  { cout << "createUnixSocket:" << endl; }
	void createPipe()    { cout << "createUnixPipe:" << endl; }
    void createThread()  { cout << "createUnixThread:" << endl; }
};
class VmsFactory : public Factory {
public:
    void createSocket()   { cout << "createVmsSocket:" << endl; }
	void createPipe()     { cout << "createVmsPipe:" << endl; }
	void createThread()   { cout << "createVmsThread:" << endl; }
};
class NtFactory : public Factory {
public:
    void createSocket()    { cout << "createNtSocket:" << endl; }
	void createPipe()      { cout << "createNtPipe:" << endl; }
    void createThread()    { cout << "createNtThread:" << endl; }
};

void doOneLaneIPC(Factory *factory) 
{
	if( factory  )
	   factory->createSocket();
}
void doTwoLaneIPC(Factory *factory)
{
	if( factory )
	factory->createPipe();
}
void doParallelProcessing(Factory *factory)
{
	if( factory )
	factory->createThread();
}
void main()
{
	Factory* factory = NULL;
	#ifdef UNIX
    factory = new UnixFactory();
    #elif VMS
    factory = new VmsFactory();
    #elif NT
    factory = new NtFactory();
    #endif
	if( factory )
	{
		doOneLaneIPC(factory);
		doTwoLaneIPC(factory);
		doParallelProcessing(factory);
		cout << "over" << endl;
	}
	else
    	cout << "factory is NULL" << endl;
}/*void createUnixSocket()  { cout << "createUnixSocket:" << endl; }void createVmsSocket()   { cout << "createVmsSocket:" << endl; }void createNtSocket()    { cout << "createNtSocket:" << endl; }void createUnixPipe()    { cout << "createUnixPipe:" << endl; }void createVmsPipe()     { cout << "createVmsPipe:" << endl; }void createNtPipe()      { cout << "createNtPipe:" << endl; }void createUnixThread()  { cout << "createUnixThread:" << endl; }void createVmsThread()   { cout << "createVmsThread:" << endl; }void createNtThread()    { cout << "createNtThread:" << endl; }void doOneLaneIPC() {#ifdef UNIX   createUnixSocket();#elif VMS   createVmsSocket();#elif NT   createNtSocket();#endif}void doTwoLaneIPC() {#ifdef UNIX   createUnixPipe();#elif VMS   createVmsPipe();#elif NT   createNtPipe();#endif}void doParallelProcessing() {#ifdef UNIX   createUnixThread();#elif VMS   createVmsThread();#elif NT   createNtThread();#endif}void main( void ) {   doOneLaneIPC();   doTwoLaneIPC();   doParallelProcessing();   cout << "main: complete" << endl;}*/// -- current output --// createVmsSocket:// createVmsPipe:// createVmsThread:// main: complete// -- target output --// VmsFactory: createSocket// VmsFactory: createPipe// VmsFactory: createThread// main: complete

⌨️ 快捷键说明

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