|
| 1 | +--- |
| 2 | +layout:pattern |
| 3 | +title:Singleton |
| 4 | +folder:singleton |
| 5 | +permalink:/patterns/singleton/ |
| 6 | +categories:Creational |
| 7 | +tags: |
| 8 | +-Gang of Four |
| 9 | +--- |
| 10 | + |
| 11 | +##Amaç |
| 12 | + |
| 13 | +Bir sınıfın yalnızca bir örneğine sahip olduğundan emin olun ve ona global bir erişim noktası sağlayın. |
| 14 | + |
| 15 | + |
| 16 | +##Açıklama |
| 17 | + |
| 18 | +Örnek |
| 19 | + |
| 20 | +>Büyücülerin büyülerini çalıstıkları tek bir fildişi kule olabilir. Aynı büyülü fildişi kule, |
| 21 | +>büyücüler tarafından her zaman kullanılır. Buradaki fildişi kulesi singleton tasarım desenine örnektir. |
| 22 | +Özetle |
| 23 | + |
| 24 | +>Belirli bir sınıftan yalnızca bir nesnenin oluşturulmasını sağlar. |
| 25 | +Wikipedia açıklaması |
| 26 | + |
| 27 | + |
| 28 | + |
| 29 | +>Yazılım mühendisliğinde, tekil desen, bir sınıfın somutlaştırılmasını tek bir nesneyle sınırlayan |
| 30 | +>bir yazılım tasarım modelidir.Bu,sistemdeki eylemleri koordine etmek için |
| 31 | +>tam olarak bir nesne gerektiğinde kullanışlıdır. |
| 32 | +**Örnek** |
| 33 | + |
| 34 | +Joshua Bloch, Effective Java 2nd Edition p.18 |
| 35 | + |
| 36 | +>Enum singleton tasarım desenini uygulamak için en iyi yoldur. |
| 37 | +```java |
| 38 | +publicenumEnumIvoryTower { |
| 39 | +INSTANCE |
| 40 | +} |
| 41 | +``` |
| 42 | + |
| 43 | +Tanımladıktan sonra kullanmak için: |
| 44 | + |
| 45 | +```java |
| 46 | +var enumIvoryTower1=EnumIvoryTower.INSTANCE; |
| 47 | +var enumIvoryTower2=EnumIvoryTower.INSTANCE; |
| 48 | +assertEquals(enumIvoryTower1, enumIvoryTower2);// true |
| 49 | +``` |
| 50 | + |
| 51 | +##Sınıf diagramı |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +##Uygulanabilirlik |
| 56 | + |
| 57 | +Singleton tasarım deseni şu durumlarda kullanılmalıdır |
| 58 | + |
| 59 | +* Bir sınıfın tam olarak bir örneği olmalı ve iyi bilinen bir erişim noktasından istemciler tarafından erişilebilir olmalıdır. |
| 60 | +* Tek örnek alt sınıflandırma yoluyla genişletilebilir olduğunda ve istemciler, kodlarını değiştirmeden genişletilmiş bir örnek kullanabilmelidir |
| 61 | + |
| 62 | +##Use Case |
| 63 | + |
| 64 | +* Logging sınıflarında |
| 65 | +* Database bağlantılarını yönetmek için |
| 66 | +* File manager |
| 67 | + |
| 68 | +##Gerçek dünya örnekleri |
| 69 | + |
| 70 | +*[java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29) |
| 71 | +*[java.awt.Desktop#getDesktop()](http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#getDesktop--) |
| 72 | +*[java.lang.System#getSecurityManager()](http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getSecurityManager--) |
| 73 | + |
| 74 | + |
| 75 | +##Sonuçlar |
| 76 | + |
| 77 | +* Kendi yaratımını ve yaşam döngüsünü kontrol ederek Tek Sorumluluk İlkesini (SRP) ihlal ediyor. |
| 78 | +* Bu nesne tarafından kullanılan bir nesnenin ve kaynakların serbest bırakılmasını önleyen global bir paylaşılan örnek kullanmayı teşvik eder. |
| 79 | +* Birbirine sıkı bağlı kod oluşturur. Singleton tasarım deseni kullanan istemci sınıflarını test etmek zorlaşır. |
| 80 | +* Bir Singleton tasarım deseninden alt sınıflar oluşturmak neredeyse imkansız hale gelir. |
| 81 | + |
| 82 | +##Credits |
| 83 | + |
| 84 | +*[Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/gp/product/0201633612/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0201633612&linkCode=as2&tag=javadesignpat-20&linkId=675d49790ce11db99d90bde47f1aeb59) |
| 85 | +*[Effective Java](https://www.amazon.com/gp/product/0134685997/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0134685997&linkCode=as2&tag=javadesignpat-20&linkId=4e349f4b3ff8c50123f8147c828e53eb) |
| 86 | +*[Head First Design Patterns: A Brain-Friendly Guide](https://www.amazon.com/gp/product/0596007124/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596007124&linkCode=as2&tag=javadesignpat-20&linkId=6b8b6eea86021af6c8e3cd3fc382cb5b) |
| 87 | +*[Refactoring to Patterns](https://www.amazon.com/gp/product/0321213351/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321213351&linkCode=as2&tag=javadesignpat-20&linkId=2a76fcb387234bc71b1c61150b3cc3a7) |