简单工程模式,用于创建对象实例;隐藏了具体的类,只返回抽象的父类。
这里用到了 里氏转换原则
优点:
1.降低耦合性
隐藏了具体实现类,只需要关注抽象类
缺点:
创建类违背了开放-封闭原则
class Project
{
public:
Project()
{
cout << "Project Coustruction" << endl;
}
virtual void DoSomething()
{
cout << "Project DoSomething" << endl;
}
};
class ProjectA :public Project
{
public:
ProjectA():Project()
{
cout << "ProjectA Coustruction" << endl;
}
virtual void DoSomething() override
{
cout << "ProjectA DoSomething" << endl;
}
};
class ProjectB : public Project
{
public:
ProjectB():Project()
{
cout << "ProjectB Coustruction" << endl;
}
virtual void DoSomething() override
{
cout << "ProjectB DoSomething" << endl;
}
};
enum class ProjectType
{
ProjectA,
ProjectB
};
class SingleFactory
{
public:
//这里是业务逻辑修改最多的地方,如果涉及到增加功能,就需要在这里case一行代码,违背了开放-封闭原则
static Project* CreateProject(ProjectType projectType)
{
Project* project = nullptr;
switch (projectType)
{
case ProjectType::ProjectA:
project = new ProjectA();
break;
case ProjectType::ProjectB:
project = new ProjectB();
break;
default:
break;
}
return project;
}
};
void TestSimpleFactory()
{
Project* project = SingleFactory::CreateProject(ProjectType::ProjectA);
project->DoSomething();
delete project;
}