Résumé Motif et de l'impression

fuzzdelay:

Travailler sur plusieurs modèles de conception de l'apprentissage - en particulier ici, je travaille sur le modèle de fabrique abstraite. Je suis en train de sortie « Réception 1 En-tête 1 Pied de page 1 » en une seule ligne, mais je ne peux pas sembler sortie via la méthode displayName un à la fois. Quelle est la meilleure façon de les concaténer? Une méthode toString dans les classes abstraites? Tous les indicateurs seraient grandement appréciés. Voici mes classes:

public abstract class AbstractSalesReceiptFactory {
    public abstract AbstractReceipt createReceipt();
    public abstract AbstractHeader createHeader();
    public abstract AbstractFooter createFooter();


}

public abstract class AbstractReceipt {
    public abstract void displayName(AbstractReceipt a);

}

public abstract class AbstractHeader {
    public abstract void displayName(AbstractHeader a);

}

public abstract class AbstractFooter {
    public abstract void displayName(AbstractFooter a);

}

public class ConcreteReceipt1 extends AbstractSalesReceiptFactory{

    public AbstractReceipt createReceipt() {
        return new Receipt1();
    }
    public AbstractHeader createHeader() {
        return new Header1();
    }


    public AbstractFooter createFooter() {
        return new Footer1();
    }

    private ConcreteReceipt1() {}

    public String displayName() {
        return "Receipt1";
    }

    private static ConcreteReceipt1 instance = null;

    public static ConcreteReceipt1 getInstance() {
        instance = new ConcreteReceipt1();
        return instance;
    }

}

public class ConcreteReceipt2 extends AbstractSalesReceiptFactory{

    public AbstractReceipt createReceipt() {
        return new Receipt1();
    }

    public AbstractHeader createHeader() {
        return new Header1();
    }


    public AbstractFooter createFooter() {
        return new Footer1();
    }

    private ConcreteReceipt2() {
    }

    public String displayName() {
        return "Receipt2";
    }
    private static ConcreteReceipt2 instance = null;

    public static ConcreteReceipt2 getInstance() {
        instance = new ConcreteReceipt2();
        return instance;
    }


}

public class Footer1 extends AbstractFooter{
    public void displayName(AbstractFooter a) {
        System.out.println("Footer 1");
    }
}

public class Footer2 extends AbstractFooter{
    public void displayName(AbstractFooter a) {
        System.out.println("Footer 2");
    }
}

public class Header1 extends AbstractHeader{
    public void displayName(AbstractHeader a) {
        System.out.println("Header 1");
    }

}

public class Header2 extends AbstractHeader{
    public void displayName(AbstractHeader a) {
        System.out.println("Header 2");
    }

}

public class Receipt1 extends AbstractReceipt{
    public void displayName(AbstractReceipt a) {
        System.out.println("Receipt 1");
    }

}

public class Receipt2 extends AbstractReceipt{
    public void displayName(AbstractReceipt a) {
        System.out.println("Receipt 2");
    }

}

ma classe principale:

public class Client {

    private static AbstractReceipt ar;
    private static AbstractHeader ah;
    private static AbstractFooter af;

    public Client(AbstractSalesReceiptFactory factory) {
        ar = factory.createReceipt();
        ah = factory.createHeader();
        af = factory.createFooter();
    }

    public void run() {
        ar.displayName(ar);
        ah.displayName(ah);
        af.displayName(af);
    }

    public static void main (String [] args) {
        AbstractSalesReceiptFactory receipt1 = ConcreteReceipt1.getInstance();

        Client c1 = new Client(receipt1);
        c1.run();
    }
}
Philip Wrage:
  1. La chose la plus facile absolue que vous pourriez faire serait de changer System.out.printlnpour System.out.printvos existants displayNameimplémentations de méthode.

  2. Vous pouvez également remplacer la toStringméthode, mais vous pouvez laisser toStringtel qu'il est et l' utilisation displayName.

  3. Une autre façon simple d'obtenir la sortie que vous désirez serait de première mise à jour de la signature displayNamedans vos classes abstraites afin qu'il retourne au Stringlieu de void(et ne prend aucun argument). Par exemple,

    public abstract class AbstractReceipt {
        public abstract String displayName();
    }

Ensuite, mettre à jour les mises en œuvre dans toutes vos classes concrètes pour retourner le nom d'affichage souhaité au lieu d'imprimer directement.

    public class Receipt1 extends AbstractReceipt{
        public String displayName() {
            return "Receipt 1";
        }
    }

Enfin, la mise à jour runméthode pour effectuer la System.out.println.

    public void run() {
        System.out.println(
            String.format( "%s %s %s", ar.displayName(), ah.displayName(),  af.displayName() )
        );
    }

Cependant, votre demande est plus liée à Java E / S et non la conception de modèles. Vous utilisez simplement la sortie de la console pour fournir une vérification mort simples de votre mise en œuvre du modèle.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=318790&siteId=1
conseillé
Classement