国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++設(shè)計模式】單一職責(zé)原則

這篇具有很好參考價值的文章主要介紹了【C++設(shè)計模式】單一職責(zé)原則。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2023年8月26日,周六上午


目錄

  • 概述
  • 一個簡單的例子
  • 用單一職責(zé)原則來設(shè)計一個簡單的學(xué)生管理系統(tǒng)

概述

單一職責(zé)原則(Single Responsibility Principle,SRP),它是面向?qū)ο笤O(shè)計中的一個基本原則。

單一職責(zé)原則的核心思想是,一個類應(yīng)該只有一個引起它變化的原因。

換句話說,一個類應(yīng)該只負(fù)責(zé)一項功能或職責(zé)

這樣做的好處是,當(dāng)需求發(fā)生變化時,只有與該功能相關(guān)的類需要進(jìn)行修改,而不會影響其他不相關(guān)的功能。


一個簡單的例子

class FileManager {
public:
  void readFile(std::string filename) {
    // 讀取文件的代碼邏輯
  }

  void writeFile(std::string filename) {
    // 寫入文件的代碼邏輯
  }

  void deleteFile(std::string filename) {
    // 刪除文件的代碼邏輯
  }

  void encryptFile(std::string filename) {
    // 加密文件的代碼邏輯
  }

  void compressFile(std::string filename) {
    // 壓縮文件的代碼邏輯
  }
};

在這個示例中,F(xiàn)ileManager類負(fù)責(zé)文件的讀取、寫入、刪除、加密和壓縮等操作。

這個類違反了單一職責(zé)原則,因為它承擔(dān)了多個不同的功能,即文件操作和文件處理。

為了遵循單一職責(zé)原則,我們可以將文件操作和文件處理分離為兩個獨立的類:

class FileManager {
public:
  void readFile(std::string filename) {
    // 讀取文件的代碼邏輯
  }

  void writeFile(std::string filename) {
    // 寫入文件的代碼邏輯
  }

  void deleteFile(std::string filename) {
    // 刪除文件的代碼邏輯
  }
};


class FileProcessor {
public:
  void encryptFile(std::string filename) {
    // 加密文件的代碼邏輯
  }

  void compressFile(std::string filename) {
    // 壓縮文件的代碼邏輯
  }
};

現(xiàn)在,F(xiàn)ileManager類負(fù)責(zé)文件的基本操作,而FileProcessor類負(fù)責(zé)對文件進(jìn)行加密和壓縮等處理操作。這樣,每個類都只有一個單一的職責(zé),使得代碼更加清晰、可維護(hù)和可擴(kuò)展。

總結(jié)來說,單一職責(zé)原則要求將不同的職責(zé)分離到不同的類中,以確保每個類只負(fù)責(zé)一項功能。這樣可以提高代碼的可讀性、可維護(hù)性和可擴(kuò)展性,減少代碼之間的耦合。


用單一職責(zé)原則來設(shè)計一個簡單的學(xué)生管理系統(tǒng)

使用單一職責(zé)原則來設(shè)計一個簡單的學(xué)生管理系統(tǒng),可以將功能分解為以下幾個類:文章來源地址http://www.zghlxwxcb.cn/news/detail-679962.html

  1. Student類:表示學(xué)生對象,包含學(xué)生的基本信息(如姓名、學(xué)號、年齡)以及相關(guān)操作(如獲取學(xué)生信息、修改學(xué)生信息)。
  2. StudentDatabase類:負(fù)責(zé)學(xué)生信息的存儲和管理,包含增加學(xué)生、刪除學(xué)生、查找學(xué)生等操作。
  3. StudentUI類:負(fù)責(zé)與用戶交互,顯示菜單選項,接收用戶輸入,并調(diào)用StudentDatabase類中的方法來執(zhí)行相應(yīng)的操作。
#include <iostream>
#include <vector>
#include <string>

class Student {
private:
  std::string name;
  int studentId;
  int age;

public:
  Student(std::string name, int studentId, int age)
    : name(name), studentId(studentId), age(age) {}

  std::string getName() const {
    return name;
  }

  int getStudentId() const {
    return studentId;
  }

  int getAge() const {
    return age;
  }

  void updateName(std::string newName) {
    name = newName;
  }

  void updateAge(int newAge) {
    age = newAge;
  }
};

class StudentDatabase {
private:
  std::vector<Student> students;

public:
  void addStudent(const Student& student) {
    students.push_back(student);
  }

  void removeStudent(int studentId) {
    for (auto it = students.begin(); it != students.end(); ++it) {
      if (it->getStudentId() == studentId) {
        students.erase(it);
        break;
      }
    }
  }

  Student findStudent(int studentId) const {
    for (const auto& student : students) {
      if (student.getStudentId() == studentId) {
        return student;
      }
    }
    // 如果找不到對應(yīng)的學(xué)生,則返回一個空的Student對象
    return Student("", -1, -1);
  }

  std::vector<Student> getAllStudents() const {
    return students;
  }
};

class StudentUI {
private:
  StudentDatabase studentDB;

public:
  void displayMenu() {
    std::cout << "=== 學(xué)生管理系統(tǒng) ===" << std::endl;
    std::cout << "1. 添加學(xué)生" << std::endl;
    std::cout << "2. 刪除學(xué)生" << std::endl;
    std::cout << "3. 查找學(xué)生" << std::endl;
    std::cout << "4. 顯示所有學(xué)生" << std::endl;
    std::cout << "0. 退出" << std::endl;
  }

  void addStudent() {
    std::string name;
    int studentId, age;

    std::cout << "請輸入學(xué)生姓名: ";
    std::cin >> name;
    std::cout << "請輸入學(xué)生學(xué)號: ";
    std::cin >> studentId;
    std::cout << "請輸入學(xué)生年齡: ";
    std::cin >> age;

    Student student(name, studentId, age);
    studentDB.addStudent(student);
    std::cout << "成功添加學(xué)生!" << std::endl;
  }

  void removeStudent() {
    int studentId;

    std::cout << "請輸入要刪除的學(xué)生學(xué)號: ";
    std::cin >> studentId;

    studentDB.removeStudent(studentId);
    std::cout << "成功刪除學(xué)生!" << std::endl;
  }

  void findStudent() {
    int studentId;

    std::cout << "請輸入要查找的學(xué)生學(xué)號: ";
    std::cin >> studentId;

    Student student = studentDB.findStudent(studentId);
    if (student.getStudentId() != -1) {
      std::cout << "找到學(xué)生: " << student.getName() << std::endl;
      std::cout << "學(xué)號: " << student.getStudentId() << std::endl;
      std::cout << "年齡: " << student.getAge() << std::endl;
    } else {
      std::cout << "未找到該學(xué)生!" << std::endl;
    }
  }

  void displayAllStudents() {
    std::vector<Student> students = studentDB.getAllStudents();
    if (students.empty()) {
      std::cout << "暫無學(xué)生信息!" << std::endl;
    } else {
      std::cout << "所有學(xué)生信息:" << std::endl;
      for (const auto& student : students) {
        std::cout << "姓名: " << student.getName() << ", ";
        std::cout << "學(xué)號: " << student.getStudentId() << ", ";
        std::cout << "年齡: " << student.getAge() << std::endl;
      }
    }
  }

  void run() {
    int choice;

    do {
      displayMenu();
      std::cout << "請輸入選項: ";
      std::cin >> choice;

      switch (choice) {
        case 1:
          addStudent();
          break;
        case 2:
          removeStudent();
          break;
        case 3:
          findStudent();
          break;
        case 4:
          displayAllStudents();
          break;
        case 0:
          std::cout << "退出程序!" << std::endl;
          break;
        default:
          std::cout << "無效的選項,請重新輸入!" << std::endl;
      }
    } while (choice != 0);
  }
};

int main() {
  StudentUI studentUI;
  studentUI.run();

  return 0;
}

到了這里,關(guān)于【C++設(shè)計模式】單一職責(zé)原則的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【設(shè)計模式之禪】單一職責(zé)

    【設(shè)計模式之禪】單一職責(zé)

    最近前輩推薦我讀《設(shè)計模式之禪》這本書,原因是我寫的代碼質(zhì)量實在是一言難盡,開發(fā)速度很快,但是bug數(shù)就很多了,設(shè)計原則這種知識就需要掌握 寫這篇文主要是記錄自己的學(xué)習(xí)以及督促自己 第一章【單一職責(zé)】 從我理解的層面來談?wù)剢我辉瓌t:明確每個類每個方法

    2024年02月13日
    瀏覽(16)
  • 面向?qū)ο笤O(shè)計的六大原則(SOLID原則)-——單一職責(zé)原則

    單一職責(zé)原則(Single Responsibility Principle, SRP)是面向?qū)ο缶幊毯驮O(shè)計的五大SOLID原則之一。它強調(diào)一個類、方法或模塊應(yīng)該只有一個職責(zé),即只做一件事情。如果一個類承擔(dān)的職責(zé)過多,那么它的可維護(hù)性、可讀性和可擴(kuò)展性都會受到影響。當(dāng)需要修改類的某個職責(zé)時,可能

    2024年03月12日
    瀏覽(43)
  • 設(shè)計模式之職責(zé)鏈模式(ChainOfResponsibility)的C++實現(xiàn)

    設(shè)計模式之職責(zé)鏈模式(ChainOfResponsibility)的C++實現(xiàn)

    在軟件開發(fā)過程中,發(fā)送者經(jīng)常發(fā)送一個數(shù)據(jù)請求給特定的接收者對象,讓其對請求數(shù)據(jù)進(jìn)行處理(一個數(shù)據(jù)請求只能有一個對象對其處理)。如果發(fā)送的每個數(shù)據(jù)請求指定特定的接收者,?將帶來發(fā)送者與接收者的緊密解耦合問題。職責(zé)鏈模式可以將請求發(fā)送者與接收者解

    2024年02月11日
    瀏覽(22)
  • 【C++設(shè)計模式】依賴倒轉(zhuǎn)原則

    2023年8月30日,周三上午 目錄 概述 含義 舉個簡單的例子 傳統(tǒng)做法 使用依賴倒轉(zhuǎn)原則 代碼說明 再舉一個具體的例子 以生活為例 依賴倒轉(zhuǎn)原則(Dependency Inversion Principle,DIP)是面向?qū)ο笤O(shè)計中的一個基本原則。 含義 高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象。 也就是

    2024年02月10日
    瀏覽(26)
  • 【C++設(shè)計模式】開放-封閉原則

    2023年8月27日,周日下午 我覺得我的這篇博客還是寫得很不錯的,哈哈哈。 目錄 概述 舉例說明 用開放-封閉原則重構(gòu) 開放-封閉原則(Open-Closed Principle,OCP)是面向?qū)ο笤O(shè)計中的一個重要原則,也是許多設(shè)計模式的基礎(chǔ)。它由Bertrand Meyer在他的書 《面向?qū)ο筌浖?gòu)造》 中提出

    2024年02月10日
    瀏覽(21)
  • C++設(shè)計模式_02_面向?qū)ο笤O(shè)計原則

    變化是復(fù)用的天敵!面向?qū)ο笤O(shè)計或者說使用了抽象原則的面向?qū)ο笤O(shè)計最大的優(yōu)勢在于#

    2024年02月11日
    瀏覽(21)
  • 設(shè)計模式-職責(zé)鏈模式

    ??將請求的發(fā)送和接收解耦,讓多個接收對象都有機(jī)會處理這個請求。將這些接收對象串成一條鏈,并沿著這條鏈傳遞這個請求,直到鏈上的某個接收對象能夠處理它為止。 ??這么說比較抽象,我用更加容易理解的話來進(jìn)一步解讀一下。 ??在職責(zé)鏈模式中,多個處理

    2024年02月04日
    瀏覽(23)
  • 設(shè)計模式之~職責(zé)鏈模式

    設(shè)計模式之~職責(zé)鏈模式

    簡述: ????????職責(zé)鏈模式(Chain of Responsibility):使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這個對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。這里發(fā)出這個請求的客戶端并不知道這當(dāng)中的哪一個對象

    2024年02月07日
    瀏覽(20)
  • 設(shè)計模式(20)職責(zé)鏈模式

    設(shè)計模式(20)職責(zé)鏈模式

    一、介紹: 1、定義:責(zé)任鏈模式(Chain of Responsibility Pattern)是一種行為設(shè)計模式,使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這個對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。在責(zé)任鏈模式中,當(dāng)一個對

    2024年02月07日
    瀏覽(22)
  • js設(shè)計模式:職責(zé)鏈模式

    js設(shè)計模式:職責(zé)鏈模式

    可以處理鏈?zhǔn)秸{(diào)用的業(yè)務(wù)邏輯,下一步操作需要上一步操作的處理結(jié)果 可以使用職責(zé)鏈模式進(jìn)行解耦操作,按順序鏈向下傳遞,依次向下查找可以處理的業(yè)務(wù)邏輯

    2024年02月21日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包