【设计模式】设计模式的学习*策略模式*工厂模式*抽象工厂

#include <iostream>

using namespace std;
//策略模式
//计算
class Cal
{
public:
	virtual int oper(int a ,int b) = 0;
};
//加法,
class Add :public Cal
{
public:
	int oper(int a, int b)
	{
		cout << "add ";
		return (a + b);
	}
};
//乘法
class Mul :public Cal
{
	int oper(int a, int b)
	{
		cout << "Mul ";
		return (a*b);
	}
};
void main()
{
	Cal * c = new Add();
	c->oper(1, 2);
	getchar();
}
#include <iostream>

using namespace std;
//这是工厂模式
//---------策略模式的代码---start
//计算
class Cal
{
public:
	virtual int oper(int a, int b) = 0;
};
//加法,
class Add :public Cal
{
public:
	int oper(int a, int b)
	{
		cout << "add ";
		return (a + b);
	}
};
//乘法
class Mul :public Cal
{
	int oper(int a, int b)
	{
		cout << "Mul ";
		return (a*b);
	}
};
//------------策略模式的代码---------end
class CalFactory{
public:
	//也可以设置成静态的
	Cal* getCal(char a)
	{
		switch (a)
		{
		case '+':
			return new Add();
			break;
		case '*':
			return new Mul();
			break;

		default:
			return NULL;
			break;
		}
	}
};

void main()
{
	//Cal *a = CalFactory::getCal('+');静态直接调用
	CalFactory *c = new CalFactory();
	Cal* a = c->getCal('+');
	cout<<a->oper(1, 2);
	getchar();
}
#include <iostream>

using namespace std;

/*
这是抽象工厂模式
由于两个或多个对象联系紧密,放在一起生产
其实下面AFactory也可以不要,但是必须要在abstractory中有可以获得A,B的派生类实例的方法。
*/
class A{};//里面有个抽象方法
class A1 :public A{};
class A2 : public A{};
class AFactory{};//策略模式可以获得,A1或A2的实例


class B{};
class B1 :public B{};
class B2 :public B{};
class BFactory{};

class abstractFactory{};//有两个方法,就是策略模式中生产A的派生类的实例和生产B派生类的实例

class A1B1Factory{};//可以获得A1,B1的实例


这是C++,抽象类就相当于接口了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值