Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save embedded4ever/adc5c58715f7179fd9f16c5caee73c5c to your computer and use it in GitHub Desktop.
Save embedded4ever/adc5c58715f7179fd9f16c5caee73c5c to your computer and use it in GitHub Desktop.
Singleton Tasarım Kalıbı Örneği - Singleton Design Pattern
/* 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