博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(C++)——抽象工厂模式
阅读量:3958 次
发布时间:2019-05-24

本文共 2484 字,大约阅读时间需要 8 分钟。

抽象工厂模式

抽象工厂是负责多个配套类的统一创建,某些类我希望他们配套使用,比如说衣服,当我指定了要穿西装,如果我要穿衣服(?),那么我希望创建的是配套的西装上衣和西装裤子,而不是西装上衣配个大裤衩子。

// Coat.h//衣服抽象类#pragma onceclass Coat{
public: virtual void wear() = 0;}
//Pants.h//裤子抽象类#pragma onceclass Pant{
public: virtual void wear() = 0;}
//CoatImpl.h#pragma once#include "Coat.h"#include 
//西装上衣class SuitCoat final : public Coat{
public: virtual void wear() override {
std::cout << "Wear suit coat." << std::endl; }}//背心class Tank final : public Coat{
public: virtual void wear() override {
std::cout << "Wear tank." << endl; }}
//PantsImpl.h#pragma once#include "Pants.h"#include 
//西装裤子class SuitPants final : public Pants{
public: virtual void wear() override {
std::cout << "Wear suit pants." << std::endl; }}//运动裤class SportsShorts final : public Pants{
public: virtual void wear() override {
std::cout << "Wear sports shorts." << endl; }}
//Factory.h#pragma once#include "Coat.h"#include "Pants.h"//抽象工厂类class AbstractFactory{
public: virtual Coat* getCoat() = 0; virtual Pants* getPants() = 0;}//西装工厂class SuitFactory final : public AbstractFactory{
public: virtual Coat* getCoat() override; virtual Pants* getPants() override;}//运动装工厂class SportsFactory final : public AbstractFactory{
public: virtual Coat* getCoat() override; virtual Pants* getPants() override;}
//Factory.cpp#include "Factory.h"#include "CoatImpl.h"#include "PantsImpl.h"virtual Coat* SuitFactory::getCoat() override{
return new SuitCoat();}virtual Pants* SuitFactory::getPants() override{
return new SuitPants();}virtual Coat* SportsFactory::getCoat() override{
return new Tank();}virtual Pants* SportsFactory::getPants() override{
return new SportsShorts();}
//main.cpp#include "Factory.h"int main(){
//想穿西装 AbstractFactory* f = new SuitFactory(); Coat* coat = f->getCoat(); coat->wear(); Pants* pants = f->getPants(); pants->wear(); delete coat; coat = nullptr; delete pants; pants = nullptr; delete f; f = nullptr; //要去打球 f = new SportsFactory(); coat = f->getCoat(); coat->wear(); pants = f->getPants(); pants->wear(); delete coat; coat = nullptr; delete pants; pants = nullptr; delete f; f = nullptr; return 0;}

可以看到,抽象工厂模式,当指定了工厂之后,生产的类一定配套。所以抽象工厂模式是负责生产多个配套使用的类。

抽象工厂和工厂的区别,在于工厂模式只负责一种对象的生成,而抽象工厂负责多个配套类的生成。

转载地址:http://htxzi.baihongyu.com/

你可能感兴趣的文章
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>
strstr函数和find函数的异同
查看>>
Java的反射
查看>>
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>
优化数据库的八种方法
查看>>