package org.tynamo.descriptor.extension; import org.tynamo.descriptor.extension.DescriptorExtension; import java.util.Map; /** * Implementation of the "Extension Object Pattern (Erich Gamma)" * Participant: Subject. * It declares the interface to query whether an object has a particular extension. */ public interface Extensible { public boolean supportsExtension(String key); public void removeExtension(String key); public void addExtension(String key, DescriptorExtension extension); public boolean supportsExtension(Class extensionType); public void removeExtension(Class extensionType); public void addExtension(Class extensionType, DescriptorExtension extension); public DescriptorExtension getExtension(String key); public <E extends DescriptorExtension> E getExtension(Class<E> extensionType); Map<String, DescriptorExtension> getExtensions(); }