C++ 语言 设计模式面试题解答示例

C++阿木 发布于 3 天前 3 次阅读


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++实现这些模式。设计模式是软件工程中的重要工具,掌握它们有助于提高代码的可维护性和可扩展性。在面试中,理解设计模式并能够将其应用到实际问题中,是展示你编程能力的重要方式。