MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの基礎 - シングルトンのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの基礎 - シングルトン
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == オブジェクト指向のプログラム言語のクラスのデザインパターンの1種である。<br> デザインパターンとは、オブジェクト指向の言語で使用される設計のパターンのことであり、設計時に直面する問題とその解決策を整理してまとめたものを指す。<br> <br> シングルトンは、クラスの設計方法の1つであり、クラスのインスタンスを2つ以上生成できないようにすることで、常に同一のインスタンスが参照されるデザインパターンとなる。<br> 例えば、インスタンスの状態を常に持つ場合やクラス端で共通のデータとしてアクセスする必要がある場合に使用される。<br> <br><br> == 使用例 : ログクラス == ログファイルの操作を行うクラスをシングルトンパターンで設計することは、<br> アプリケーション全体で1つのログファイルインスタンスのみを保持して、統一されたアクセスポイントを提供するための一般的な方法である。<br> <br> シングルトンパターンを使用することにより、異なるコンポーネントからのログメッセージが1つのログファイルに順序よく書き込まれることが保証できる。<br> <br> 以下の例では、指定されたパスでログファイルを開き、ログファイルになんらかの文字列を書き込んでいる。<br> もし、ログファイルが存在しない場合はファイルを作成する。<br> また、ファイルのオープンに失敗した場合はエラーを返す。<br> <syntaxhighlight lang="c++"> // Logger.hファイル #ifndef LOGGER_H #define LOGGER_H #include <QCoreApplication> #include <QFile> #include <QTextStream> class Logger { private: bool m_LogFileOpened; QFile m_LogFile; QTextStream m_Textout; private: Logger(); // プライベートコンストラクタ ~Logger(); // デストラクタ Logger(const Logger &rhs) = delete; // コピー禁止 Logger &operator=(const Logger &rhs) = delete; // 代入禁止 bool isLogFileOpen() const; public: static Logger& instance(); void writeLog(const QString &message); }; #endif // LOGGER_H </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // Logger.cpp #include <QFileInfo> #include "logger.h" Logger::Logger() : m_LogFileOpened(false) { } Logger::~Logger() { if (m_LogFile.isOpen()) { m_LogFile.close(); } } Logger& Logger::instance(const QString &filePath) { static Logger instance; // シングルトンインスタンスの生成 if (!instance.m_LogFile.isOpen() && !filePath.isEmpty()) { // ログファイルを開く instance.m_LogFile.setFileName(filePath); instance.m_LogFileOpened = instance.m_LogFile.open(QIODevice::WriteOnly | QIODevice::Append); if (instance.m_LogFileOpened) { instance.m_Textout.setDevice(&instance.m_LogFile); } } return instance; } void Logger::writeLog(const QString &message) { if (m_LogFileOpened) { // ファイルを直ちに書き込む m_Textout << message << "\n"; m_Textout.flush(); } } bool Logger::isLogFileOpen() const { return m_LogFileOpened; } </syntaxhighlight> <br> 上記のクラスでは、Loggerクラスのインスタンスを取得する時に、ログファイルのパスをinstanceメソッドに渡す。<br> Loggerクラスのインスタンスが初めて要求された時、指定されたパスでログファイルを開こうと試みる。<br> <br> ログファイルが存在しない場合は、ファイルを新規作成する。<br> ログファイルの作成に失敗した場合は、writeLogメソッドを呼び出しても何も処理が行われないようにエラーハンドリングしている。<br> <br> また、isLogFileOpenメソッドを実行することにより、ログファイルが正常に開かれたかどうかを確認することができる。<br> <br> <syntaxhighlight lang="c++"> QString logFilePath = "/tmp/logfile.log"; Logger &logger = Logger::instance(logFilePath); if (logger.isLogFileOpen()) { logger.writeLog("This is a sample message."); } else { // ログファイルのオープンに失敗した場合 // ...略 } </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - シングルトン
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse