本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客
模式说明:
- 方案: 将数据存储和检索逻辑与业务逻辑分离,通过数据访问对象(DAO)封装数据存取细节。
- 优点: 提高代码可维护性和可扩展性;降低业务逻辑与数据存取逻辑的耦合度。
- 缺点: 可能引入过多的接口和类,增加了代码复杂度;对于简单的应用程序可能显得繁琐。
本质思想: 将数据存取操作从业务逻辑中分离出来,使得数据操作和业务逻辑各自独立,易于维护和扩展。
实践建议: 不需要学习。在业务中如果品类过多,在调整品类信息或者增加种类时,自然而然想到将品类维护到一个map或者vector中。每次使用全部,或者按需取
代码示例:
#include <iostream>
#include <vector>
#include <string>
// 数据访问对象接口
class BirdDAO {
public:
virtual std::vector<std::string> getAllBirds() const = 0;
virtual void addBird(const std::string& birdName) = 0;
};
// 鸟类基类
class Bird {
public:
virtual void display() const = 0;
};
// 具体鸟类:鹦鹉
class Parrot : public Bird {
public:
void display() const override {
std::cout << "Parrot" << std::endl;
}
};
// 具体鸟类:鸽子
class Pigeon : public Bird {
public:
void display() const override {
std::cout << "Pigeon" << std::endl;
}
};
// 具体实现数据访问对象
class BirdDAOImpl : public BirdDAO {
private:
std::vector<std::string> birds;
public:
std::vector<std::string> getAllBirds() const override {
return birds;
}
void addBird(const std::string& birdName) override {
birds.push_back(birdName);
}
};
int main() {
// 创建数据访问对象
BirdDAOImpl birdDAO;
// 添加鸟类到数据访问对象
birdDAO.addBird("Parrot");
birdDAO.addBird("Pigeon");
// 获取所有鸟类并显示
std::vector<std::string> allBirds = birdDAO.getAllBirds();
for (const auto& bird : allBirds) {
std::cout << bird << std::endl;
}
return 0;
}