设计过程中如何对类的构造函数进行私有化隐藏,仅能通过另一类的接口获取?或是某一固定接口获取?
方法一 工厂模式(友元)
在工厂模式中,一个类的对象的创建是通过另一个工厂类来完成的。这个工厂类包含一个静态方法,负责构建和返回私有构造函数类的实例。
举一个简单的示例:
class Product {
private:
// 私有化构造函数
Product() {}
friend class ProductFactory;
public:
// 公开的成员函数
void Display() {
//...
}
};
class ProductFactory {
public:
// 静态方法用来创建Product类的实例
static Product CreateProduct() {
return Product();
}
};
int main() {
// 通过工厂类创建Product类的实例
Product myProduct = ProductFactory::CreateProduct();
myProduct.Display();
}
在这个例子中,Product
的构造函数是私有的。我们没有办法直接创建 Product
的实例。但是通过 ProductFactory
类的 CreateProduct()
静态方法,我们可以获得一个 Product
的实例。
方法二: 单例模式
如果你希望类的实例全局只有一个,可以使用单例模式。在这个模式下,类自身提供了一个静态方法来获取唯一的实例,并且构造函数是私有的。
下面是单例模式的一个示例:
class Singleton {
private:
// 私有化构造函数
Singleton() {}
// 禁止拷贝构造函数
Singleton(const Singleton&) = delete;
// 禁止拷贝赋值操作
Singleton& operator=(const Singleton&) = delete;
public:
// 静态方法,用于获取实例
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
// 其他成员函数
void Display() {
//...
}
};
int main() {
// 获取单例类的实例
Singleton& mySingleton = Singleton::getInstance();
mySingleton.Display();
}
在单例模式中,Singleton
类中包含一个静态方法 getInstance()
。外部通过调用 getInstance()
来获取这个唯一的实例。