C++ 设计模式面试题解答示例
在设计模式面试中,C++ 程序员需要展示对常见设计模式的深入理解,以及如何将这些模式应用到实际问题中。以下是一篇关于C++设计模式面试题解答的示例文章,旨在帮助读者准备面试,并理解设计模式在实际编程中的应用。
设计模式是软件工程中的一种重要概念,它描述了在软件设计过程中常见的问题及其解决方案。C++作为一种强大的编程语言,支持多种设计模式。本文将围绕C++设计模式面试题,提供一系列解答示例,帮助读者更好地理解和应用这些模式。
单例模式(Singleton)
面试题
请实现一个单例模式,确保一个类只有一个实例,并提供一个全局访问点。
解答示例
cpp
include
class Singleton {
private:
static Singleton instance;
Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
void doSomething() {
std::cout << "Doing something..." << std::endl;
}
static void releaseInstance() {
if (instance != nullptr) {
delete instance;
instance = nullptr;
}
}
};
Singleton Singleton::instance = nullptr;
int main() {
Singleton s1 = Singleton::getInstance();
Singleton s2 = Singleton::getInstance();
std::cout << "s1 and s2 are the same instance: " << (s1 == s2) <doSomething();
Singleton::releaseInstance();
return 0;
}
工厂模式(Factory Method)
面试题
设计一个工厂模式,用于创建不同类型的对象,而不需要指定具体类。
解答示例
cpp
include
include
class Product {
public:
virtual void use() = 0;
virtual ~Product() {}
};
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductA" << std::endl;
}
};
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductB" << std::endl;
}
};
class Creator {
public:
virtual std::unique_ptr createProduct() = 0;
virtual ~Creator() {}
};
class ConcreteCreatorA : public Creator {
public:
std::unique_ptr createProduct() override {
return std::make_unique();
}
};
class ConcreteCreatorB : public Creator {
public:
std::unique_ptr createProduct() override {
return std::make_unique();
}
};
int main() {
Creator creatorA = new ConcreteCreatorA();
Creator creatorB = new ConcreteCreatorB();
std::unique_ptr productA = creatorA->createProduct();
std::unique_ptr productB = creatorB->createProduct();
productA->use();
productB->use();
delete creatorA;
delete creatorB;
return 0;
}
观察者模式(Observer)
面试题
实现一个观察者模式,当某个对象的状态发生变化时,所有观察者都会收到通知。
解答示例
cpp
include
include
include
class Observer {
public:
virtual void update() = 0;
virtual ~Observer() {}
};
class ConcreteObserverA : public Observer {
public:
void update() override {
std::cout << "Observer A: Updated!" << std::endl;
}
};
class ConcreteObserverB : public Observer {
public:
void update() override {
std::cout << "Observer B: Updated!" << std::endl;
}
};
class Subject {
private:
std::vector<#std::shared_ptr> observers;
public:
void attach(std::shared_ptr observer) {
observers.push_back(observer);
}
void detach(std::shared_ptr observer) {
observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());
}
void notify() {
for (auto& observer : observers) {
observer->update();
}
}
};
int main() {
Subject subject;
std::shared_ptr observerA = std::make_shared();
std::shared_ptr observerB = std::make_shared();
subject.attach(observerA);
subject.attach(observerB);
subject.notify(); // Both observers will be notified
subject.detach(observerA);
subject.notify(); // Only observer B will be notified
return 0;
}
总结
本文通过几个常见的C++设计模式面试题,展示了如何使用C++实现这些模式。设计模式是软件工程中的重要工具,掌握它们有助于提高代码的可维护性和可扩展性。在面试中,理解设计模式并能够将其应用到实际问题中,是展示你编程能力的重要方式。
Comments NOTHING