Design Patterns

De Banane Atomic
Version datée du 3 septembre 2019 à 08:42 par Nicolas (discussion | contributions) (→‎Double-checked locking)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Factory Method

Permet d'instancier des objets dont les classes (Lion, Wolf) ne sont directement connues par l'appelant (AnimalsFactory).
Mais elles héritent toutes d'une classe abstraite (Animal) qui elle est connue de l'appelant.
FactoryMethod.png

Singleton

Cs.svg
public class Singleton
{
    private Singleton() { }
    private static readonly Singleton _instance = new Singleton();
    public static Singleton Instance
    {
        get { return _instance; }
    }
}

Double-checked locking

Cs.svg
public class Singleton
{
    private static readonly object Lock = new object();
    private static readonly Singleton _instance;

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton();
                    }
                }
            }
        }
        // permet d'implémenter un set, là où Lazy ne le permet pas
    }
}

// In .NET Framework 4.0, the Lazy<T> class was introduced, which internally uses double-checked locking by default
public class Singleton
{
    private static readonly Lazy<Singleton> _instance = new Lazy<Singleton>(() => new Singleton());

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            return _instance.Value;
        }
    }
}

Abstract Factory

Fournit une interface (ContinentFactory) pour créer des familles d'objets (Carnivore, Herbivore) sans avoir besoin de connaitre l'implémentation de ces classes (Lion, Wildebeest, Wolf, Bison).
AbstractFactory.png

Builder

Factorise le code de plusieurs