工厂模式通常又可以分为简单工厂模式、工厂模式、抽象工厂模式;他们有一个共同的类并从它继承而来。
工厂的实现:
工厂(creater)角色
所有的内部逻辑可以被外部对象调用;
抽象(Product)角色
所有具体产品的公共接口;
具体产品(Concrete Product)
具体实例对象;
简单工厂模式代码实现:
#include<iostream>
using namespace std;
class Fruit
{
public:
virtual void GetFruit() = 0;
virtual ~Fruit() {}
};
class Apple:public Fruit
{
public:
virtual void GetFruit()
{
cout << "i am Apple" << endl;
}
};
class Banana :public Fruit
{
public:
virtual void GetFruit()
{
cout << "i am Banana" << endl;
}
};
class Facotry
{
public:
Fruit* SetFruit(const char* p)
{
if (strcmp(p, "Apple") == 0)
{
return new Apple;
}
else if (strcmp(p, "Banana") == 0)
{
return new Banana;
}
else
{
return nullptr;
}
}
};
int main()
{
Facotry* f = new Facotry;
Fruit* Banana = f->SetFruit("Banana");
Banana->GetFruit();
delete Banana;
delete f;
return system("pause");
}
工厂模式代码实现:
#include<iostream>
using namespace std;
class Fruit
{
public:
virtual void GetFruit() = 0;
virtual ~Fruit() {}
};
class Apple:public Fruit
{
public:
virtual void GetFruit()
{
cout << "i am Apple" << endl;
}
};
class Pear :public Fruit
{
public:
virtual void GetFruit()
{
cout << "i am Pear" << endl;
}
};
class AdvFactory
{
public:
virtual Fruit* SetFruit() = 0;
};
class AppleFactory :public AdvFactory
{
public:
virtual Fruit* SetFruit()
{
return new Apple;
}
};
class PearFactory :public AdvFactory
{
public:
virtual Fruit* SetFruit()
{
return new Pear;
}
};
int main()
{
AdvFactory* Adv = nullptr;
Fruit* f = nullptr;
Adv = new AppleFactory;
f = Adv->SetFruit();
f->GetFruit();
delete f;
delete Adv;
Adv = new PearFactory;
f = Adv->SetFruit();
f->GetFruit();
delete f;
delete Adv;
return system("pause");
}
工厂模式与简单工厂模式的差异在于工厂模式的解耦和,实现功能的单一职责原则。