23种设计模式C++实例之工厂方法模式

工厂模式有三种:简单工厂模式,工厂方法模式,抽象工厂模式,其中简单工厂模式不属于23种设计模式,实例如下:

#include <iostream>

using namespace std;

/*
 * 不符合开闭原则,不是23种标准的设计模式
 * */

class Fruit {
	public:
		virtual ~Fruit() {}
		virtual void sayName() = 0;
};

class Banana: public Fruit {
	public:
		virtual void sayName() {
			cout << "Banana" << endl;
		}
};

class Apple: public Fruit {
	public:
		virtual void sayName() {
			cout << "Apple" << endl;
		}
};

class Factory {
	public:
		Fruit* create(char* p) {
			if (strcmp(p, "banana")) {
				return new Banana;	
			} else if (strcmp(p, "apple")) {
				return new Apple;	
			} else {
				return NULL;	
			}	
		}
};

int main() {
	Factory* fac = new Factory;

	Fruit* banana = fac->create("banana");
	banana->sayName();
	delete banana;

	Fruit* apple = fac->create("apple");
	apple->sayName();
	delete apple;

	delete fac;

	return 0;
}

 

工厂方法模式如下:

#include <iostream>

/*
 * 符合开闭原则,添加新的产品不需要修改原有的代码,只需要添加新的代码
 * 添加一种新的水果只需要添加一个水果类,然后添加一种新的工厂即可
 * */

using namespace std;

class Fruit {
	public:
		virtual ~Fruit() {}
		virtual void sayName() = 0;
};

class Banana: public Fruit {
	public:
		virtual void sayName() {
			cout << "Banana" << endl;
		}
};

class Apple: public Fruit {
	public:
		virtual void sayName() {
			cout << "Apple" << endl;
		}
};

class Factory {
	public:
		virtual ~Factory() {}
		virtual Fruit* create() = 0;
};

class BananaFactory: public Factory {
	public:
		Fruit* create() {
			return new Banana;	
		} 
};

class AppleFactory: public Factory {
	public:
		Fruit* create() {
			return new Apple;	
		}
};

int main() {
	Factory* fac = NULL;
	Fruit* fruit = NULL;
	
	fac = new BananaFactory;
	fruit = fac->create();
	fruit->sayName();
	delete fruit;
	delete fac;

	fac = new AppleFactory;
	fruit = fac->create();
	fruit->sayName();
	delete fruit;
	delete fac;

	return 0;
}

设计原则

创建模式(5种)

结构模式(7种)

行为模式(11种)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值