static void Main(string[] args) { //////////////////Example1 var ourClass = MyClass.Instance; ourClass.Name = "Parla"; ourClass.SaySomething(); var tss = ThreadSafeSingleton.Instance; tss.Name = "Parla2"; tss.SaySomething(); //////////////////Example2 ///Eager Initialization var eagerInitialization = EagerInitialization.GetEagerInitialization(); Console.WriteLine("Eager initialization instance hashcode:{0}", eagerInitialization.GetHashCode()); ///Static Block Initialization var staticBlockInstance = StaticBlockInitialization.getInstance(); Console.WriteLine("Static Block initialization instance hashcode:{0}", staticBlockInstance.GetHashCode()); ////// Lazy Initilization /// tek thread ile çalışınca sıkıntı olmaz, tek thread ile verimli çalışır.3 farklı instance isteği için bir kez instance oluşur. /* LazyInitialization lazy1 = LazyInitialization.getInstance(); * lazy1.WriteMessage("ben birinci threadim"); * LazyInitialization lazy2 = LazyInitialization.getInstance(); * lazy2.WriteMessage("ben ikinci threadim"); * LazyInitialization lazy3 = LazyInitialization.getInstance(); * lazy3.WriteMessage("ben üçüncü threadim");*/ /// fakat birden fazla thread ile aynı anda çalışında metod farklı instancelar üretmeye baslar ve bu durum, singleton patterninin prensiplerinin dışına çıkmasına sebep olur. Console.WriteLine("LAZY parallel thread working:"); Parallel.Invoke( () => Write1(), () => Write2()); ///ThreadSafeDoubleCheck Console.WriteLine("THREADSAFEDOUBLECHECK parallel thread working:"); Parallel.Invoke( () => Write3(), () => Write4()); Console.ReadKey(); }
/* * 1. Làm sao để 1 class chỉ có thể có duy nhất 1instance? Trả lời * -Private constructor của class đó để đảm bảo rằng class lớp khác không thể truy cập vào constructor và tạo ra instance mới * -Tạo một biến private static là thể hiện của class đó để đảm bảo rằng nó là duy nhất và chỉ được tạo ra trong class đó thôi. * 2. Làm sao để có thể ccung cấp một cáchs toàn cầu để truy cấp tới instance đó.Trả lời * -Tạo một public static menthod trả về instance vừa khởi tạo bên trên, đây là cách duy nhất để các class khác có thể truy cập vào instance của class này */ private static void Main(string[] args) { //Truong hop: EagerInitialization Console.WriteLine("***Singleton Pattern Demo***\n"); Console.WriteLine("Trying to create instance s1."); EagerInitialization s1 = EagerInitialization.GetInstance; Console.WriteLine("Trying to create instance s2."); EagerInitialization s2 = EagerInitialization.GetInstance; if (s1 == s2) { Console.WriteLine("Only one instance exists."); } else { Console.WriteLine("Different instances exist."); } Console.Read(); //Truong hop: LazyInitialization }