小编Joh*_*der的帖子

Factory方法设计模式和Bridge模式有什么区别?

大家好,

有人可以解释一下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++ algorithm design-patterns

5
推荐指数
1
解决办法
102
查看次数

绑定构造函数出现错误时:C++ 中依赖类型名称之前缺少“typename”

如何在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”

有人可以帮我解决这个问题吗?

c++ c++11 c++14

1
推荐指数
1
解决办法
2135
查看次数

标签 统计

c++ ×2

algorithm ×1

c++11 ×1

c++14 ×1

design-patterns ×1