关于C++创建抽象工厂方法模式的学习笔记

1. 抽象工厂方法模式与工厂方法模式的区别

工厂方法模式是在简单工厂方法基础之上再加上开闭原则形成的一种设计模式,其创建对象时不用new创建对象,而是使用工厂来创建,我们只需要提供一个接口就能实现创建,但是工厂模式在创建对象时候太过于单一,它要么生产香蕉,要么生产鸭梨,但是不能做到同时生产这两种,也就是说不能生产一个产品组。而抽象工厂方法模式能够同时生产一个产品族。

2.抽象工厂方法实现
中国工厂负责同时生产中国内地的水果,而美国的工厂负责同时生产美国内地的水果。

#include<cstdio>
#include<iostream>
using namespace std;
//水果类
class Fruit
{
public:
	virtual void ShowName()
	{
		cout<<"fruit\n";
	}
};
//水果工厂
class FruitFactory
{
public:
	virtual Fruit* getApple()
	{
		return new Fruit();
	}
	virtual Fruit* getBanana()
	{
		return new Fruit();
	}
};

//中国香蕉
class ChinaBanana : public Fruit
{
public:
	virtual void ShowName()
	{
		cout<<"China Banana \n"<<endl;
	}
};


//中国苹果
class ChinaApple : public Fruit
{
public:
	virtual void ShowName()
	{
		cout<<"China Apple \n"<<endl;
	}
};


//美国香蕉
class AmerciaBanana : public Fruit
{
public:
	virtual void ShowName()
	{
		cout<<"Amercia Banana \n"<<endl;
	}
};


//美国苹果
class AmerciaApple : public Fruit
{
public:
	virtual void ShowName()
	{
		cout<<"America Apple \n"<<endl;
	}
};
//中国工厂
class ChinaFruitFactory : public FruitFactory
{
public:
	virtual Fruit* getApple()
	{
		return new ChinaApple();
	}
	virtual Fruit* getBanana()
	{
		return new ChinaBanana();
	}
};
//美国工厂
class AmericaFruitFactory : public FruitFactory
{
public:
	virtual Fruit* getApple()
	{
		return new AmerciaApple();
	}
	virtual Fruit* getBanana()
	{
		return new AmerciaBanana();
	}
};

int main()
{	
	FruitFactory * ff  = NULL;
	Fruit *fruit = NULL;

	ff = new ChinaFruitFactory();
	fruit = ff->getApple();
	fruit->ShowName();
	fruit = ff->getBanana();
	fruit->ShowName();

	delete fruit;
	delete ff;

	ff = new AmericaFruitFactory();
	fruit = ff->getApple();
	fruit->ShowName();
	fruit = ff->getBanana();
	fruit->ShowName();

	delete fruit;
	delete ff;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值