Návrhový vzor: Unified Access Pattern


Motivace:

Návrhový vzor Unified Access Pattern popisuje typově bezpečný přístup (čtení a zápis) k hodnotám objektu mapa (objekt mapující klíče k hodnotám) v případě, že datové typy hodnot se vzájemně liší.

Struktura (class model):

Model obsahuje dvě třídy: Class Diagram

Implementace v jazyce Java

Protože implementace vyžaduje podporou generických datových typů, je třeba použít Java SE 5.0, nebo vyšší.
Třída MyMap implementuje jednoduchou mapu a obsahuje dva klíče NAME a AGE.
import java.util.*;
public class MyMap {
    
    public static final Property<String> NAME = new Property<String>();
    public static final Property<Integer> AGE = new Property<Integer>();
    private Map<Property, Object> data = new HashMap<Property, Object>();
protected Object readValue(Property key) { return data.get(key); } protected void writeValue(Property key, Object value) { data.put(key, value); } }
Všechny klíče jsou instance třídy Property, nicméně každý z nich bude poskytovat hodnotu jiného datového typu.
Pokud budou ležet obě třídy MyMap a Property ve stejném balíku, je možné ponechat viditelnost metod writeValue() a readValue() na protected, aby je nemohl používat cizí objekt.
public class Property<VALUE> {
public void setValue(MyMap map, VALUE value) { map.writeValue(this, value); } public VALUE getValue(MyMap map) { return (VALUE) map.readValue(this); } }
V návrhovém vzoru se přistupuje k hodnotám mapy pouze pomocí metod klíče. Na následujícím kódu lze ověřit, že metoda setValue dovolí přiřadit do mapy pouze objekt deklarovaného typu a metoda getValue tento typ zase vrací.
            
MyMap map = new MyMap();
MyMap.NAME.setValue(map, "Peter Prokop"); MyMap.AGE .setValue(map, 22); String name = MyMap.NAME.getValue(map); int age = MyMap.AGE.getValue(map); System.out.println(name + " is " + age);

Praktické využití:

Návrhový vzor může nahradit klasické POJO objekty. Smysl to má v případě, kdy je třeba odkazovat se na metodu (set/get) objektu, nikoli na jeho hodnotu. Tři konkrétní příklady využití v jazyku Java: Pravděpodobně první projekt, který byl postaven na tomto návrhovém vzoru je jWorkSheet spolu s projektem Ujorm.
Oba projekty jsou dostupné včetně zdrojových kódů na SourceForge.net pod otevřenou licencí ode dne 2007-10-24.
Návrhový vzor byl v těchto projektech rozšířen o další metody a formálně je popsán dvojicí rozhraní

O autorovi:


PPone(c) 2007

Valid XHTML 1.0 Strict