wtorek, 6 marca 2012

StaticHolder

W projektach bardzo często jest potrzebny obiekt, który w programie może zapamiętać stan paru obiektów. Wymyśliłem klasę przetrzymującą dany stan obiektu. Jest to statyczna klasa z jednym polem, który przetrzymuje stan.
    public static class StaticHolder
    {
        public static Object Hold { get; set; }
    }

    public static class StaticHolder<T1>
    {
        public static T1 Hold { get; set; }
    }

    public static class StaticHolder<T1, T2>
    {
        public static T1 Hold { get; set; } 
    }

    public static class StaticHolder<T1, T2, T3>
    {
        public static T1 Hold { get; set; }
    }
Do podstawowej klasy zostały stworzone generyczne typy. Zastosowanie StaticHolder przedstawione jest w tym kodzie:
StaticHolder.Hold = 1; 
//zapisane do obiektu 1

StaticHolder.Hold = "Text 1"; 
//zamiast 1 jest "Text 1"


StaticHolder<int>.Hold = 2; 
StaticHolder<string>.Hold = "Text 2"; 
//jest rozróżnienie między int a string


StaticHolder<int, int>.Hold = 3;
StaticHolder<string, int>.Hold = "Text 3";


bool equals = 
StaticHolder<int, string>.Hold
.Equals(StaticHolder<int, int>.Hold);
//false, StaticHolder<int, string> != StaticHolder<int, int>
// drugi typ generyczny wprowadza dodatkowe rozróżnienie

equals = 
StaticHolder<string, int>.Hold
.Equals(StaticHolder<string, int>.Hold);


// rozróżnienie dla poniższych StaticHolder
StaticHolder<int, int>.Hold = 4;
StaticHolder<int, string>.Hold = 5;
StaticHolder<int, decimal>.Hold = 6;
StaticHolder<int, EncodingInfo>.Hold = 7;
StaticHolder<int, List<int>>.Hold = 8;
StaticHolder<int, List<string>>.Hold = 9;

Nie wiem czy taki tok myślenia już ktoś nazwał i opisał. Możliwe, że jest on nazwany pod inną nazwą. Ja na ten mechanizm nazywam "StaticHolder Pattern". Z poniższego źródła można pobrać kod:

Brak komentarzy:

Prześlij komentarz