Model and code examples of GoF Design Patterns for C++.
This project is available for the following objectives:
- To understand GoF Design Pattern examples in C++.
- To understand the mapping between UML model and C++ code.
- To try Model-Driven Development (MDD) using Astah and M PLUS plug-in.
UML model example:
C++ header file example:
// ˅
// ˄
#ifndef STRUCTURAL_PATTERNS_COMPOSITE_FILE_H_
#define STRUCTURAL_PATTERNS_COMPOSITE_FILE_H_
// ˅
#include <string>
#include "structural_patterns/composite/FileSystemElement.h"
using namespace std;
// ˄
class File : public FileSystemElement
{
// ˅
// ˄
private:
const string name;
const int size;
public:
File(const string& name, const int size);
~File();
const string getName() const;
const int getSize() const;
// Print this element with the "upper_path".
void print(const string& upper_path) const;
// ˅
public:
protected:
private:
File(const File&) = delete;
File& operator=(const File&) = delete;
File(File&&) = delete;
File& operator=(File&&) = delete;
// ˄
};
// ˅
// ˄
#endif // STRUCTURAL_PATTERNS_COMPOSITE_FILE_H_
// ˅
// ˄
C++ source file example:
// ˅
#include <iostream>
#include "structural_patterns/composite/File.h"
using namespace std;
// ˄
File::File(const string& name, const int size)
: name(name)
, size(size)
// ˅
// ˄
{
// ˅
// ˄
}
File::~File()
{
// ˅
// ˄
}
const string File::getName() const
{
// ˅
return name;
// ˄
}
const int File::getSize() const
{
// ˅
return size;
// ˄
}
void File::print(const string& upper_path) const
{
// ˅
cout << upper_path << "/" << toString() << endl;
// ˄
}
// ˅
// ˄
UML Modeling Tool
- Download the modeling tool Astah UML or Professional, and install.
- Download M PLUS plug-in ver.2.2 or higher, and add it to Astah.
How to add plugins to Astah
Visual Studio
- Download and install Visual Studio.
Check "Desktop development with C++" and "C++/CLI support" when installing.
Code Generation from UML
- Open the Astah file (model/DesignPatternExamplesInCpp.asta).
- Select model elements on the model browser of Astah.
- Click the Generate Code button.
The generated code has User Code Area. The User Code Area is the area enclosed by "˅" and "˄". Handwritten code written in the User Code Area remains after a re-generation. View code example.
For detailed usage of the tools, please see Astah Manual and M PLUS plug-in Tips.
Build and Run
- Open the solution file (design-pattern-examples-in-cpp.sln) in Visual Studio.
- Set up a startup project, and run it.
- Gamma, E. et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994
- Hiroshi Yuki. Learning Design Patterns in Java [In Japanese Language], Softbank publishing, 2004
This project is licensed under the Creative Commons Zero (CC0) license. The model and code are completely free to use.
C#, Crystal, Go, Java, JavaScript, Kotlin, Python, Ruby, Scala, Swift, TypeScript