Forked from bunyamintamar/SingletonTasarimKalibi.cpp
Last active
March 27, 2022 15:02
-
-
Save embedded4ever/adc5c58715f7179fd9f16c5caee73c5c to your computer and use it in GitHub Desktop.
Singleton Tasarım Kalıbı Örneği - Singleton Design Pattern
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Singleton Tasarım Kalıbı Örneği - Singleton Design Pattern */ | |
/* | |
Bir nesnenin sadece bir kez yaratılması isteniyorsa, | |
başka bir tane yaratılsa da yine aynı nesneyi işaret etmesi ve böylece | |
teklik sağlanmak isteniyorsa bu yöntem kullanılır. | |
*/ | |
#include <iostream> | |
#include <string> | |
/**************************************************************************/ | |
class Settings // Bir kez yaratılsın ve ayakta kalsın | |
{ | |
private: | |
Settings() {} | |
static Settings *settings; | |
int data; | |
public: | |
Settings(Settings const& ) = delete; | |
Settings& operator=(Settings const &) = delete; | |
static Settings *CreateSettings() | |
{ | |
if (nullptr == settings) | |
settings = new Settings(); | |
else | |
std::cout << "Boyle bir nesne zaten var !" << std::endl; | |
return settings; | |
} | |
static void restart() | |
{ | |
if (nullptr != settings) | |
{ | |
delete settings; | |
} | |
} | |
void setData(int data) { this->data = data; } | |
int getData() const { return data; } | |
}; | |
/**************************************************************************/ | |
Settings *Settings::settings = nullptr; | |
/**************************************************************************/ | |
int main() | |
{ | |
std::cout << "s1 yaratiliyor" << std::endl; | |
Settings *s1 = Settings::CreateSettings(); | |
s1->setData(1); // s1 nesnesinin datası 1 | |
std::cout << "s1 nesnesinin datasi: " << s1->getData() << std::endl << std::endl; | |
std::cout << "s2 nesnesi yaratiliyor" << std::endl; | |
Settings *s2 = Settings::CreateSettings(); // s2 yaratılamaz. Çünkü s1 zaten var. | |
// İçeriği de aynı olmak zorunda | |
std::cout << "s2 nesnesinin datasi: " << s2->getData() << std::endl << std::endl; // s1'in datası 1 olduğu için bunun da datası 1 | |
std::cout << "s3 nesnesi yaratiliyor" << std::endl; | |
Settings *s3 = Settings::CreateSettings(); // s3 yaratılsa bile o aslında s1. | |
s3->setData(3); // s3'ün datasını değiştirince aslında | |
// s1'in datası değişiyor | |
std::cout << "s1 nesnesinin datasi: " << s1->getData() << std::endl << std::endl; // s1'in datası 3 oldu | |
delete s1; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment