Archive

Articles taggués ‘’

N’exposer que les méthodes publiques de vos API Java

Patron Accesseur

Tout les développeurs ont toujours voulu séparer logiquement leur code en packages bien distincts afin de rassembler les classes ayant une sémantique commune pour l’API. Se pose alors une question: “comment ne pas créer de méthodes publiques pour qu’elles ne soient pas publiées avec mon API, et exposer ses fonctionnalités aux classes d’autres packages?”. En Java il existe 4 modifiers de méthodes: Public, Protected, Package et Private. Il manque en fait le modifier, appelons le “Friendly”, qui autoriserait l’appel de méthodes d’autres packages seulement aux classes amies. Cela permettrait de résoudre à la fois les problèmes liés à la séparation du code et à la publication de méthodes d’API. Voici un exemple de patron Accessor:

package jean.michel.guillaume.api;
 
/**
 * class part of the public API, every one can use it
 */
public final class RMCore {
    static {
        Accessor.setDefault(new AccessorImpl());
    }
 
    /** Anyone can change value of the item. */
    public void addNode(String url) {
        //impl
    }
 
    /** Only friends can notify node changes.  */
    void notifyNodeUpdate(String url) {
        //impl
    }
}
package jean.michel.guillaume;
 
/**
 * We'll use this class to expose methods in separate packages
 */
public abstract class Accessor {
    private static volatile Accessor DEFAULT;
    public static Accessor getDefault(){
        Accessor a = DEFAULT;
        if( a != null){
            return a;
        }
        try{
            Class.forName(RMCore.class.getName(), true, RMCore.class.getClassLoader());
        }catch(Exception e){
            e.printStackTrace();
        }
        return DEFAULT;
    }
 
    public static void setDefault(Accessor a){
        if( DEFAULT != null){
            throw new IllegalStateException();
        }
        DEFAULT = a;
    }
 
    protected abstract void void notifyNodeUpdate(String url);
}
package jean.michel.guillaume.api;
 
import jean.michel.guillaume.Accessor;
 
/**
 * Now, we can just implement our own Accessor in a separate package
 * to gain access to friendly methods!! Don't forget to declare AccessorImpl
 * package private!!
 */
final class AccessorImpl extends Accessor {
 
    protected void notifyNodeUpate(String url) {
 
    }
}
Categories: Java, Programmation Tags: ,

Oeuf de paques Android

Rendez-vous sur la page http://www.google.co.uk/, taper la requête “meet android”, et cliquez sur “I am feeling lucky”… On s’occupe comme on peut chez Google… ;)

Categories: Info Tags: ,

Bonheur

Some cause happiness wherever they go; others whenever they go

–Oscar Wilde

Categories: Citation Tags:

Star de votre propre film

Dire Merci

Vous voulez être la star de votre propre film, remercier quelqu’un ou simplement faire rire?

Visitez le site: http://en.tackfilm.se/

Categories: Uncategorized Tags:

VMware Server 2 – Nom du Datacenter par defaut

Aujourd’hui j’ai un peu joué avec jASMINe VMM pour comparer ses fonctionnalités avec ProActive VMM. Pendant la configuration de VMM-Agent, il faut préciser le nom du datacenter et du répertoire de machines virtuelles dans lesquels vous voulez travailler… Selon Virtual Infrastructure SDK Documentation, il apparaît qu’il n’existe qu’un seul datacenter pour les hôtes ( ESX host ou VMware Server 2 par exemple ), mais je n’ai rien trouvé dans la documentation à propos des noms… J’ai donc légèrement modifié ProActive VMM pour afficher les noms du datacenter par défaut et du répertoire de machines virtuelles:

Datacenterha-datacenter

VM-Folder: vm