抽象工厂模式 c++版


抽象产品A  -> ProductA.h  & ProductA.cpp :


//
//  ProductA.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__ProductA__
#define __AbstractFactory__ProductA__
#include <iostream>
class ProductA {
                                                                                                                                                                                       
public:
                                                                                                                                                                                       
    ProductA();
    virtual ~ProductA();
                                                                                                                                                                                       
    virtual void fun() = 0;
                                                                                                                                                                                       
};
#endif /* defined(__AbstractFactory__ProductA__) */


//
//  ProductA.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "ProductA.h"
ProductA::ProductA()
{
                                                                                                                                                                                    
}
ProductA::~ProductA()
{
                                                                                                                                                                                    
}


具体产品A1 -> ProductA1.h  &  ProductA1.cpp :


//
//  ProductA1.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__ProductA1__
#define __AbstractFactory__ProductA1__
#include <iostream>
#include "ProductA.h"
using namespace std;
class ProductA1 : public ProductA {
                                                                                                                                                                  
public:
                                                                                                                                                                  
    ProductA1();
    virtual ~ProductA1();
                                                                                                                                                                  
    virtual void fun();
};
#endif /* defined(__AbstractFactory__ProductA1__) */


//
//  ProductA1.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "ProductA1.h"
ProductA1::ProductA1()
{
                                                                                                                                                               
}
ProductA1::~ProductA1()
{
                                                                                                                                                               
}
void ProductA1::fun()
{
    cout << "ProductA1 -> fun()" << endl;
}


具体产品A2 -> ProductA2.h  &  ProductA2.cpp :


//
//  ProductA2.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__ProductA2__
#define __AbstractFactory__ProductA2__
#include <iostream>
#include "ProductA.h"
using namespace std;
class ProductA2 : public ProductA {
                                                                                                                                                     
                                                                                                                                                     
public:
                                                                                                                                                     
    ProductA2();
    virtual ~ProductA2();
                                                                                                                                                     
    virtual void fun();
};
#endif /* defined(__AbstractFactory__ProductA2__) */


//
//  ProductA2.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "ProductA2.h"
ProductA2::ProductA2()
{
                                                                                                                                                  
}
ProductA2::~ProductA2()
{
                                                                                                                                                  
}
void ProductA2::fun()
{
    cout << "ProductA2 -> fun()" << endl;
}


抽象产品B -> ProductB.h  &   ProductB.cpp :


//
//  ProductB.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__ProductB__
#define __AbstractFactory__ProductB__
#include <iostream>
class ProductB {
                                                                                                                                     
public:
                                                                                                                                     
    ProductB();
    virtual ~ProductB();
                                                                                                                                     
    virtual void fun() = 0;
};
#endif /* defined(__AbstractFactory__ProductB__) */


//
//  ProductB.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "ProductB.h"
ProductB::ProductB()
{
                                                                                                                                  
}
ProductB::~ProductB()
{
                                                                                                                                  
}


具体产品B1 -> ProductB1.h  &  ProductB1.cpp :


//
//  ProductB1.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__ProductB1__
#define __AbstractFactory__ProductB1__
#include <iostream>
#include "ProductB.h"
using namespace std;
class ProductB1 : public ProductB{
                                                                                                                    
public:
                                                                                                                    
    ProductB1();
    virtual ~ProductB1();
                                                                                                                    
    virtual void fun();
};
#endif /* defined(__AbstractFactory__ProductB1__) */


//
//  ProductB1.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "ProductB1.h"
ProductB1::ProductB1()
{
                                                                                                                 
}
ProductB1::~ProductB1()
{
                                                                                                                 
}
void ProductB1::fun()
{
    cout << "ProductB1 -> fun()" << endl;
}


具体产品B2 -> ProductB2.h  &  ProductB2.cpp :


//
//  ProductB2.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__ProductB2__
#define __AbstractFactory__ProductB2__
#include <iostream>
#include "ProductB.h"
using namespace std;
class ProductB2 : public ProductB{
                                                                                                 
public:
                                                                                                 
    ProductB2();
    virtual ~ProductB2();
                                                                                                 
    virtual void fun();
};
#endif /* defined(__AbstractFactory__ProductB2__) */


//
//  ProductB2.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "ProductB2.h"
ProductB2::ProductB2()
{
                                                                                              
}
ProductB2::~ProductB2()
{
                                                                                              
}
void ProductB2::fun()
{
    cout << "ProductB2 -> fun()" << endl;
}


抽象工厂 -> Factory.h  &   Factory.cpp :


//
//  Factory.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__Factory__
#define __AbstractFactory__Factory__
#include "ProductA.h"
#include "ProductB.h"
class Factory {
                                                                        
public:
                                                                        
    Factory();
    virtual ~Factory();
                                                                        
    virtual ProductA * getProductA() = 0;
    virtual ProductB * getProductB() = 0;
                                                                        
};
#endif /* defined(__AbstractFactory__Factory__) */


//
//  Factory.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "Factory.h"
Factory::Factory()
{
                                                                     
}
Factory::~Factory()
{
                                                                     
}


具体工厂1 -> Factory1.h  &  Factory1.cpp :


//
//  Factory1.h
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#ifndef __AbstractFactory__Factory1__
#define __AbstractFactory__Factory1__
#include <iostream>
#include "Factory.h"
#include "ProductA1.h"
#include "ProductB1.h"
class Factory1 : public Factory {
                                                   
                                                   
public:
                                                   
    Factory1();
    virtual ~Factory1();
                                                   
    virtual ProductA *getProductA();
    virtual ProductB *getProductB();
                                                   
};
#endif /* defined(__AbstractFactory__Factory1__) */


//
//  Factory1.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "Factory1.h"
Factory1::Factory1()
{
                                                
}
Factory1::~Factory1()
{
                                                
}
ProductA * Factory1::getProductA()
{
    return new ProductA1();
}
ProductB * Factory1::getProductB()
{
    return new ProductB1();
}


具体工厂2 -> Factory2.h  &   Factory2.cpp :


//
//  Factory2.cpp
//  AbstractFactory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include "Factory2.h"
Factory2::Factory2()
{
                                  
}
Factory2::~Factory2()
{
                                  
}
ProductA * Factory2::getProductA()
{
    return new ProductA2();
}
ProductB * Factory2::getProductB()
{
    return new ProductB2();
}


测试  ->  main.cpp :


//
//  main.cpp
//  Factory
//
//  Created by hejinlai on 13-8-8.
//  Copyright (c) 2013年 yunzhisheng. All rights reserved.
//
#include <iostream>
#include "Factory.h"
#include "Factory1.h"
#include "Factory2.h"
int main(int argc, const char * argv[])
{
    Factory *factory;
               
    factory = new Factory1();   
    ProductA *productA = factory->getProductA();
    ProductB *productB = factory->getProductB();
    productA->fun();
    productB->fun();
               
    delete factory;
    delete productA;
    delete productB;
               
    factory = new Factory2();
    productA = factory->getProductA();
    productB = factory->getProductB();
    productA->fun();
    productB->fun();
               
    delete factory;
    delete productA;
    delete productB;
               
    return 0;
}


测试结果:


ProductA1 -> fun()

ProductB1 -> fun()

ProductA2 -> fun()

ProductB2 -> fun()


你可能感兴趣的:(java,设计模式,C++,抽象工厂,Objective-C)