Monat: November 2015

Simple Factory

Einführung

„Eine factory (Fabrik) ist ein Objekt um andere Objekte zu erstellen.“

Dieser Satz sagt im wesentlichen alles über das Simple Factory Pattern aus. Anstatt ein Objekt direkt über den Konstruktor zu instanzieren, wird eine spezielle Methode, eine Factory, für diesen Zweck verwendet. Meist findet das Simple Factory Pattern kaum Bedeutung und wird häufig als ein Teil, oder als Grundlage, von komplexeren Pattern verwendet. Beispiele dafür sind Object Libraries oder das Abstract Factory Pattern. Teilweise werden Simple Factories auch nicht als Pattern angesehen sondern eher als eine Grundlage der objektorientierten Programmierung.

Als Factory wird meist eine einzelne Methode bezeichnet, die ein bereits instanziertes Objekt zurückgibt.
Ein simples Beispiel:

C#

        static void Main(string[] args)
        {
            var kittyCat = Animal.CreateCat();

            Console.WriteLine($"My cat is {kittyCat.color} and his name is {kittyCat.name}");
            Console.ReadLine();
        }

        class Animal
        {
            public string name { get; set; }
            public string color { get; set; }

            public static Animal CreateCat()
            {
                var cat = new Animal
                {
                    name = "Kitty",
                    color = "black"
                };
                
                return cat;
            }
        }

JAVA

public class TestClass {

	public static void main(String[] args){
		animal kittyCat = Animal.CreateCat();
		
		System.out.println("My cat is " + kittyCat.getColor() + 
			" and his name is " + kittyCat.getName());
	}
}

public class Animal {
	private String name;
	private String color;
	
	public String getName() { return name; }
	public void setName(String name) { this.name = name; }
	
	public String getColor() { return color; }
	public void setColor(String color) { this.color = color; }
	
	public static Animal CreateCat()
	{
		Animal cat = new Animal();	
		cat.name = "Kitty";
		cat.color = "black";
		
		return cat;
	}
}

Value Object Design Pattern

Einführung

Mit Value Object werden einfache Objekte bezeichnet, bei denen die Werte der Eigenschaften bei einem Vergleich verwendet werden. Es werden also nicht, wie sonst bei Referenztypen üblich, die Identitäten der Objekte verglichen.

C# bietet für dieses Pattern die Möglichkeit  ein Struct zu definieren. Structs sind bereits per Definition Werttypen. Beim Vergleich von Structs werden also die Werte miteinander verglichen. Es bedarf nur kleinen Anpassungen damit es vollends dem Pattern entspricht.

in JAVA existiert hingegen keine Möglichkeit einen benutzerdefinierten Value Type zu erstellen. Früher kam es jedoch vor, dass Data Transfer Objects als Value Objects bezeichnet wurden.

C#

        static void Main(string[] args)
        {
            var catFromStructA = new CatStruct { Name = "Kitty", Color = "Black" };
            var catFromStructB = new CatStruct { Name = "Kitty", Color = "Black" };
            var resultStructs = catFromStructA.Equals(catFromStructB);

            Console.WriteLine($"Struct equation: {resultStructs}");


            var catFromClassA = new CatClass { Name = "Kitty", Color = "Black" };
            var catFromClassB = new CatClass { Name = "Kitty", Color = "Black" };
            var resultClasses = catFromClassA.Equals(catFromClassB);

            Console.WriteLine($"Class equation: {resultClasses}");

            Console.ReadLine();
        }

        public struct CatStruct
        {
            public string Name;
            public string Color;
        }

        public class CatClass
        {
            public string Name;
            public string Color;
        }