资讯动态

软件设计原则之OCP开闭原则

发布时间:2026/10/27 12:29:14 来源:尧图企业网站定制
(OCP) 开闭原则 Open Closed Principle核心原则对扩展开放对修改关闭。场景描述还是拿 UserInfo 进行举例。在开发过程中我们需要对我们使用的对象进行多步的组合操作比如这里要打印账户和密码信息。常规的方式就是在外部直接进行调用或者在类的内部添加新的 to_string() 方法。#include ctime #include iostream #include string class UserInfo { private: std::string username; std::string password; public: UserInfo(const std::string name, const std::string pwd) { username name; password pwd; } std::string get_username() const { return username; } std::string get_password() const { return password; } }; int main() { UserInfo user(Tom, 123456); // 希望 UserInfo 有个to_string() 的方法 std::cout name user.get_username() \n; std::cout pwd user.get_password() \n; }问题暴露如果这是你一个人开发的内容那直接在 UserInfo 中添加接口没人会管你。但是当你在一个大型团队中进行多人协同开发的时候并不是你想直接在别人的类添加代码就能添加的。这就是所谓的要对修改进行关闭。一个比较合理的方式就是在模块的外部进行功能的扩充这里编写一个全局的 to_string() 函数来满足我们的需求。#include iostream #include sstream #include string // 修改关闭 // 类模块不做任何改动 class UserInfo { private: std::string username; std::string password; public: UserInfo(const std::string name, const std::string pwd) { this-username name; this-password pwd; } std::string get_username() const { return username; } std::string get_password() const { return password; } }; // 开放关闭 std::string to_string(const UserInfo user) { std::stringstream ss; ss name user.get_username() \n; ss pwd user.get_password() \n; return ss.str(); } int main() { UserInfo user(Tom, 123456); std::cout to_string(user); }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑