#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++,抽象类就相当于接口了。