抽象产品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()
转载于:https://blog.51cto.com/ikinglai/1266995