設計模式-工廠模式 C++實現

工廠模式

定義:一個創建產品對象的工廠接口,將產品對象的實際創建工作推遲到具體子類工廠類中。
特點:(1)用戶只要知道具體工廠的名稱就可以得到所需要的產品,無需知道產品創建的過程。(2)增加新產品時只需要添加具體產品類和對應的具體工廠,無需修改源代碼,滿足開閉原則。
C++實現如下
Product.h
#pragma once
class AbstractProduct {
public:
	AbstractProduct();
	virtual ~AbstractProduct();
	virtual void operation() = 0;
};

class ProductA :public AbstractProduct {
public:
	ProductA();
	~ProductA();
	void operation();
};
class ProductB :public AbstractProduct {
public:
	ProductB();
	~ProductB();
	void operation();
};
Product.cpp
#include"Product.h"
#include<iostream>

using namespace std;

AbstractProduct::AbstractProduct() {
	cout << "AbstractProduct" << endl;
}
AbstractProduct::~AbstractProduct() {
	cout << "~AbstractProduct" << endl;
}
ProductA::ProductA() {
	cout << "ProductA" << endl;
}
ProductA::~ProductA() {
	cout << "~ProductA" << endl;
}
void ProductA::operation() {
	cout << "A operation" << endl;
}
ProductB::ProductB() {
	cout << "ProductB" << endl;
}
ProductB::~ProductB() {
	cout << "~ProductB" << endl;
}
void ProductB::operation() {
	cout << "B operation" << endl;
}
Factory.h
#pragma once
#include"Product.h"
class AbstractFactory {
public:
	AbstractFactory();
	virtual ~AbstractFactory();
	virtual AbstractProduct* createProduct() = 0;
};
class FactoryA :public AbstractFactory {
public:
	FactoryA();
	~FactoryA();
	AbstractProduct* createProduct();
};
class FactoryB :public AbstractFactory {
public:
	FactoryB();
	~FactoryB();
	AbstractProduct* createProduct();
};
Factory.cpp
#include"Factory.h"
#include"Product.h"
#include<iostream>
using namespace std;
AbstractFactory::AbstractFactory() {
	cout << "AbstractFactory" << endl;
}
AbstractFactory::~AbstractFactory() {
	cout << "~AbstractFactory" << endl;
}
FactoryA::FactoryA() {
	cout << "FactoryA" << endl;
}
FactoryA::~FactoryA() {
	cout << "~FactoryA" << endl;
}
AbstractProduct* FactoryA::createProduct() {
	return new ProductA();
}
FactoryB::FactoryB() {
	cout << "FactoryB" << endl;
}
FactoryB::~FactoryB() {
	cout << "~FactoryB" << endl;
}
AbstractProduct* FactoryB::createProduct() {
	return new ProductB();
}

main.cpp
#include"Factory.h"

int main(void) {
	AbstractFactory* factortyA = new FactoryA();
	AbstractProduct* productA = factortyA->createProduct();

	AbstractFactory* factortyB = new FactoryB();
	AbstractProduct* productB = factortyB->createProduct();
	productA->operation();
	productB->operation();

	
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章