Table of Contents
1. Simple implementation" >1. Simple implementation
2. Thread safety" >2. Thread safety
" > ##3. Double lock
" >4. Static initialization
Home Backend Development C#.Net Tutorial Analysis of singleton pattern and common writing methods (design pattern 01)

Analysis of singleton pattern and common writing methods (design pattern 01)

Feb 13, 2017 am 11:39 AM

Ensure that a class has only one instance and provide a global access point to the instance.

——"Design Pattern"

The concept of singleton pattern is very simple. Below is C# Using language as an example, the advantages and disadvantages of common singleton writing methods are listed.

1. Simple implementation

 public sealed class Singleton
    {
        static Singleton instance = null;

        public void Show()
        {
            Console.WriteLine(  "instance function");
        }
        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
Copy after login

Comments:


            Not safe for threads
Requirements have been met in single thread
Advantages:
Since the instance is created inside the Instance property method , so the class can use additional functionality
and not perform instantiation until the object requires an instance; this approach is called "lazy instantiation". Lazy instantiation avoids unnecessary instantiation of singletons when the application starts.


2. Thread safety

public sealed class Singleton
    {
        static Singleton instance = null;
        private static readonly object padlock = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }

                return instance;
            }
        }
    }
Copy after login



Comment:

The only part of the program that is locked at the same time is A thread can enter
The object instance is created by the thread that enters first
Later threads will be false when entering (instance == null) and will not be returned To create object instances
Added additional overhead and lost performance


##3. Double lock

 public sealed class Singleton
    {
        static Singleton instance = null;
        private static readonly object padlock = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }
    }
Copy after login

Comment:


Multi-thread safety
Threads are not locked every time
Allow instantiation to be delayed until the first time the object is accessed


4. Static initialization

 public sealed class Singleton
    {
        private static readonly Singleton instance = null;
        static Singleton()
        {
            instance = new Singleton();
        }
        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
Copy after login

Comment:


Depends on the common language runtime to handle variable initialization
Public static properties provide a Global access point
Less control over the instantiation mechanism (implemented by .NET)
Static initialization is the preferred method to implement Singleton in .NET

Small Note:

# Static constructors have neither access modifiers, C# will automatically mark them as private, why they must be marked For private,

is to prevent code written by developers from calling it. The call to it is always the responsibility of the CLR.







##5. Delayed initialization

public sealed class Singleton
    {
        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                return Nested.instance;
            }
        }

        public static void Hello()
        {
        }

        private class Nested
        {
            internal static readonly Singleton instance = null;
            static Nested()
            {
                instance = new Singleton();
            }
        }
    }
Copy after login
Comments:


The initialization work is done by the Nested class This is done with a static member, thus achieving lazy initialization.

Because the timing of calling static functions is when the class is instantiated or the static member is called, And the .net framework calls the static constructor to initialize the static member variables, So, if you write according to the fourth method, When the Hello method is called again, a Singleton instance will be instantiated. This is not what we want to see, because we may just want to use the Hello method and nothing else.

Notes:

1. The instance constructor in Singleton mode can be set to protected to allow subclasses to be derived.
2. Singleton mode generally does not support the ICloneable interface, because this may lead to multiple object instances, which is contrary to the original intention of Singleton mode.
3. Singleton mode generally does not support serialization, because this may also lead to multiple object instances, which is also contrary to the original intention of Singleton mode.
4. The Singletom mode only takes into account the management of object creation, but does not consider the management of object destruction. In terms of platforms that support garbage collection and the overhead of objects, we generally do not need to perform special management of their destruction.


##Summary:

1. Singleton Patterns limit rather than improve class creation.
2. The core of understanding and extending the Singleton pattern is "how to control the user's arbitrary call to the constructor of a class using new."
3. You can easily modify a Singleton to have a few instances. This is allowed and meaningful.


The above is the content of singleton pattern and common writing method analysis (design pattern 01), more related Please pay attention to the PHP Chinese website (www.php.cn) for content!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1664
14
PHP Tutorial
1269
29
C# Tutorial
1249
24
One article to understand the singleton pattern in JavaScript One article to understand the singleton pattern in JavaScript Apr 25, 2023 pm 07:53 PM

The JS singleton pattern is a commonly used design pattern that ensures that a class has only one instance. This mode is mainly used to manage global variables to avoid naming conflicts and repeated loading. It can also reduce memory usage and improve code maintainability and scalability.

The application of singleton mode and factory mode in C++ function overloading and rewriting The application of singleton mode and factory mode in C++ function overloading and rewriting Apr 19, 2024 pm 05:06 PM

Singleton pattern: Provide singleton instances with different parameters through function overloading. Factory pattern: Create different types of objects through function rewriting to decouple the creation process from specific product classes.

Thoughts on thread safety issues in singleton mode in PHP Thoughts on thread safety issues in singleton mode in PHP Oct 15, 2023 am 10:14 AM

Thinking about thread safety issues of singleton mode in PHP In PHP programming, singleton mode is a commonly used design pattern. It can ensure that a class has only one instance and provide a global access point to access this instance. However, when using the singleton pattern in a multi-threaded environment, thread safety issues need to be considered. The most basic implementation of the singleton pattern includes a private constructor, a private static variable, and a public static method. The specific code is as follows: classSingleton{pr

Getting Started with PHP: Singleton Pattern Getting Started with PHP: Singleton Pattern May 20, 2023 am 08:13 AM

In software development, we often encounter situations where multiple objects need to access the same resource. In order to avoid resource conflicts and improve program efficiency, we can use design patterns. Among them, the singleton pattern is a commonly used way to create objects, which ensures that a class has only one instance and provides global access. This article will introduce how to use PHP to implement the singleton pattern and provide some best practice suggestions. 1. What is the singleton mode? The singleton mode is a commonly used way to create objects. Its characteristic is to ensure that a class has only one instance and provides

In PHP, what is the concept of singleton design pattern? In PHP, what is the concept of singleton design pattern? Aug 18, 2023 pm 02:25 PM

The Singleton pattern ensures that a class has only one instance and provides a global access point. It ensures that only one object is available and under control in the application. The Singleton pattern provides a way to access its unique object directly without instantiating the object of the class. Example<?php classdatabase{ publicstatic$connection; privatefunc

PHP Design Patterns: The Path to Code Excellence PHP Design Patterns: The Path to Code Excellence Feb 21, 2024 pm 05:30 PM

Introduction PHP design patterns are a set of proven solutions to common challenges in software development. By following these patterns, developers can create elegant, robust, and maintainable code. They help developers follow SOLID principles (single responsibility, open-closed, Liskov replacement, interface isolation and dependency inversion), thereby improving code readability, maintainability and scalability. Types of Design Patterns There are many different design patterns, each with its own unique purpose and advantages. Here are some of the most commonly used PHP design patterns: Singleton pattern: Ensures that a class has only one instance and provides a way to access this instance globally. Factory Pattern: Creates an object without specifying its exact class. It allows developers to conditionally

Extension and customization of singleton pattern in PHP framework Extension and customization of singleton pattern in PHP framework Oct 15, 2023 am 11:10 AM

Extension and customization of singleton mode in PHP framework [Introduction] Singleton mode is a common design pattern, which ensures that a class can only be instantiated once in the entire application. In PHP development, the singleton pattern is widely used, especially in the development and expansion of frameworks. This article will introduce how to extend and customize the singleton pattern in the PHP framework and provide specific code examples. [What is the singleton pattern] The singleton pattern means that a class can only have one object instance and provides a global access point for external use. In PHP development, pass

Application scenarios and thread safety processes of singleton mode in PHP distributed systems Application scenarios and thread safety processes of singleton mode in PHP distributed systems Oct 15, 2023 pm 04:48 PM

Application scenarios and thread safety processes of singleton mode in PHP distributed systems Introduction: With the rapid development of the Internet, distributed systems have become a hot topic in modern software development. In distributed systems, thread safety has always been an important issue. In PHP development, the singleton pattern is a commonly used design pattern, which can effectively solve the problems of resource sharing and thread safety. This article will focus on the application scenarios and thread safety processes of the singleton pattern in PHP distributed systems, and provide specific code examples. 1. Singleton mode

See all articles