大家好,
有人可以解释一下Factory方法设计模式和Bridge模式之间的区别吗?
因为据我所知,这两种设计模式都用于分隔接口和实现:
将抽象与实现分离。抽象将客户端代码与实现分开。因此,可以在不影响客户端代码的情况下更改实现,并且在实现更改时无需编译客户端代码。
工厂方法:
没有工厂方法的问题:
在某些情况下,我们有一个包含一些类的库来实现客户端业务逻辑。在客户端应用程序中,我们创建库类的对象以完成任务。
但是有时,根据客户要求合并其他功能,我们可能需要在库中添加其他类。然后,我们需要在客户端应用程序中创建新类的对象。
因此,每次在库端进行新更改时,客户端都需要在其末端进行一些相应的更改并重新编译代码。
使用工厂方法:
为避免此问题,我们使用Factory方法将对象创建与客户端应用程序分离。客户只需要调用库的工厂方法,而不必担心对象创建的实际实现。
因此,我们创建Factory方法来创建对象并将其移动到单独的实现文件中。现在,实现文件是唯一需要了解派生类的文件。因此,如果对任何派生类进行了更改或添加了任何新类,则实现文件是唯一需要重新编译的文件。使用工厂的每个人都只会关心该接口,该接口在应用程序的整个生命周期中都应保持一致。
客户端应用程序交互->工厂方法和调用->实现
如果我采用以下示例程序,则在添加任何类或对该类进行任何更改之后,仅重新编译Vehicle.cpp文件就足够了吗?而且在创建工厂方法时,我们是否使用静态方法?
车辆
#include <iostream>
using namespace std;
enum VehicleType {
VT_TwoWheeler, VT_ThreeWheeler, VT_FourWheeler
};
// Library classes
class Vehicle {
public:
virtual void printVehicle() = 0;
static Vehicle* Create(VehicleType type);
};
class TwoWheeler : public Vehicle {
public:
void printVehicle() {
cout << "I am two wheeler" << endl;
}
};
class ThreeWheeler : public Vehicle {
public:
void printVehicle() {
cout << "I am three wheeler" …Run Code Online (Sandbox Code Playgroud) 如何在C++中绑定构造函数?
在一个类中,我有带有构造函数的模板类,如下所示:
namespace EMRProcess
{
template<typename T>
class CEMRImpl
{
CEMRImpl(EMRProcessSR::CWebHandler<T>* pHandler_,
CSocketRemover* pSocketRemover, const std::string& strID, const std::string& strNo);
};
}
Run Code Online (Sandbox Code Playgroud)
从另一个类中,我尝试绑定构造函数,如下所示:
m_pMyObj->processEvent(EVT_MED, strTestId,
std::bind(&EMRProcess::CEMRImpl<T>::CEMRImpl,
this,
this,
strID,
strNo));
Run Code Online (Sandbox Code Playgroud)
编译时出现错误:依赖类型名称“EMRProcess::CEMRImpl::CEMRImpl”之前缺少“typename”
有人可以帮我解决这个问题吗?