摘要:c++++ 函数设计遵循的原则包括单一职责、开放-封闭、里氏替换和迪米特法则。这些原则构成了 solid 原则:单一职责 (s): 函数只应执行一个明确目标。开放-封闭 (o): 函数应可扩展而不需修改源代码。里氏替换 (l): 派生类可替换基类而不影响客户端代码。接口隔离 (i): 客户端仅依赖所需的接口。依赖反转 (d): 函数依赖抽象接口而非具体实现。
C++ 函数的艺术:设计原则与 SOLID 原则,架构健康之道 设计原则单一职责原则(SRP):函数应只有一个明确定义的目标。这使得代码更容易维护、测试和理解。
开放-封闭原则(OCP):函数的行为应该可以通过扩展来修改,而无需修改其源代码。
里氏替换原则(LSP):派生类应该能够无缝地替代其基类,而不会破坏客户端代码。
迪米特法则(LoD):函数只应知道所需的最小信息,并应避免与不相关的模块直接交互。
SOLID 原则上述设计原则为 SOLID 原则奠定了基础:
单一职责 (S):函数应执行单一明确的目标。
开闭 (O):函数应对扩展开放,对修改关闭。
里氏替换 (L):派生类应能够替换其基类而不会破坏客户端代码。
接口隔离 (I):客户端应仅依赖于它们所需的接口,而不是大而全的接口。
依赖反转 (D):函数不应直接依赖其他函数,而是应通过抽象接口依赖。
实战案例SRP:
// 获得用户的姓名 std::string get_user_name() { // 获取用户输入 return prompt_user("Enter your name: "); }
此函数遵循 SRP,因为它只执行一个任务:获取用户姓名。
OCP:
// Abstract Shape 类 class Shape { public: virtual float area() const = 0; }; // Rectangle 类(派生类) class Rectangle : public Shape { public: float width, height; float area() const override { return width * height; } };
通过继承 Shape 抽象类,Rectangle 可以扩展其功能,而无需修改 Shape 的源代码。
LSP:
// Player 类(基类) class Player { public: virtual void move() = 0; }; // HumanPlayer 类(派生类) class HumanPlayer : public Player { public: void move() override { // 人类玩家的移动逻辑 } };
HumanPlayer 可以无缝替代 Player,因为它们都实现了相同的 move() 方法。
LoD:
// 订单处理函数 void process_order(Order order) { // 用所需数据更新数据库 update_database(order); // 通过事件通知其他模块 send_order_processed_event(); }
此函数仅与处理订单相关的数据交互,避免了与其他不相关的模块直接交互。
D:
// 依赖倒置示例 class Service { public: virtual void do_something() const = 0; }; class Client { public: void use_service(Service& service) { service.do_something(); } };
Client 类通过接口依赖于 Service 类,而无需直接依赖其具体实现。
以上就是C++ 函数的艺术:设计原则与 SOLID 原则,架构健康之道的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论