9
votes

Conception d'objets modèles Java

Alors j'ai lu quelque chose Java efficace em>! Et l'une des sections les plus inspirantes du livre est la section objet immuable objet / Builder où Bloch écrit sur le "Builder" - Classe au lieu de Just Pojos.

Remarque: je parle d'objets modèles ici: Comme par exemple un article em> ou a voiture em>. p>

Voici comment j'ai écrit ces objets avant: P>

public class Car {

     public static class Builder {

         private String name;

         public Builder setName(String name) {
             this.name = name;
             return this;
         }

         public Car build() {
             reeturn new Car(this);
         }
     }

     private final String name;

     private Car(Builder builder) {
         name = builder.name;
     }

     public String getName() {
         return name;
     }
}

//Construction example
Car car = new Car.Builder().setName("Speedy").build();


1 commentaires

Je pense que le point de constructeur est lorsque vous avez affaire à un objet immuable avec certains champs requis et facultatifs. Puisque vous déclareriez des champs comme final . Donc, il ne s'applique pas à chaque design.


3 Réponses :


5
votes

the modèle de conception livre est l'alpha et l'oméga des modèles de conception actuellement. Ce n'est pas nouveau cependant mais il semble qu'il ait passé l'épreuve du temps.

Vous pouvez lire des exemples de vie réels détaillés de chaque modèle de conception, comment se rapportent-ils les uns aux autres, comment et quand les utiliser et une explication minutieuse pour chacun. Le modèle de constructeur est inclus dans le parcours.

Pour répondre à votre question, je peux présenter mes points de vue bien qu'ils ne soient bien sûr pas faisant autorité.

Je pense que si vous avez un petit nombre de champs, vous pouvez utiliser avec le constructeur. Si vous prenez CheckStyle par exemple, il incendie un avertissement sur 7 paramètres.

Si vous savez, bien sûr, vous le refroidirez bientôt que vous devez l'étendre, je pense que le modèle de constructeur est préférable car il est plus facile de refracteur. Les constructeurs de refactoring ne sont jamais amusants.

Si vous avez plus de 7 paramètres, je pense que le constructeur est bien meilleur. Je l'utilise dans le projet actuel que je travaille de manière approfondie.

Veuillez noter qu'en utilisant le modèle de constructeur, vous ne dites pas cela "d'accord, je suis un constructeur d'objet immuable". Vous dites que "d'accord, je construis des objets paramétrés". Ce n'est donc pas un problème que vous avez un ensemble de champs mutables dans votre classe. Si vous nommez cependant votre classe comme immutablefoodto et plus tard, vous ajoutez des champs mutables, cela conduit à la confusion.

Donc, s'il existe un ensemble de champs qui ne doivent pas être mutables, corrigez-les final et utilisez un constructeur / constructeur et fournissez des setters pour les mutables.


5 commentaires

Salut! Oui, j'ai lu un équivalent Java, mais c'est le modèle de constructeur, comme vous le voyez, cela est un peu moins contraint. Cela ne répond pas vraiment à la question. Mais merci pour votre réponse.


S'il vous plaît examiner votre question à nouveau: "Y a-t-il une norme sur ces conceptions et comment leur conception? Quels sont les avantages / les déféciteurs?" J'ai répondu à votre question. Je ne vois aucune autre question de questions là-bas.


Bonjour, oui je suis au courant de la question et j'apprécie votre réponse. Mais le problème ici est quand à utiliser quel modèle: Le Constructeur a expliqué ci-dessus ou constructeur args, comment traiter des champs immuables / mutables etc. Je ne peux pas accepter votre réponse simplement parce que vous êtes un lien vers un livre qui est industriel "standard", mais ne couvre toujours pas tous les aspects que j'ai mentionnés dans mon commentaire ici et dans ma question ci-dessus.


Je pense que je crois comprendre n'est pas parfait ou votre question est un peu vague. Je ne vois pas exactement où est votre problème. Vous avez dit que des choses ont ensuite fourni une solution pour eux. Quel est le problème exact?


Je mettrai à jour la question, oui la question est un peu vague, je suppose, merci de le pointer.



2
votes

Je saisis cela comme une "réponse", donc j'ai l'espace nécessaire, mais ce n'est vraiment qu'un commentaire sur le fil a commencé par Adam Aroïde.

Johan, tout d'abord, je suppose que vous parlez de l'élément 2 en Java efficace.

Notez que ce qui est présenté, il existe une forme du modèle de constructeur ADAM AROID mentionné. Josh Bloch mentionne cela directement juste avant de montrer le code pour cela en Java efficace: "Il s'agit d'une forme du modèle de constructeur [gamma95, p. 97]." (C'est à la page 13.) Il mentionne plus tard un moyen d'utiliser un autre modèle (du même livre): "Un constructeur dont les paramètres ont été définis fait une fine usine abstraite [gamma95, p. 87].

Johan, la question que vous avez posée est trop large pour l'espace ici. Je pense que la meilleure réponse est la réponse d'Adam Arioid. C'est quelque chose qui prend une étude puis appliquant cette étude pour acquérir une certaine expérience. Les discussions dans le livre des modèles de conception facilitent considérablement. Je voterai à la réponse d'Adam.


0 commentaires

-4
votes

Essayez avec ce code:

 public static boolean isEmailValid(String email) {

    boolean isValid = false;

    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}


1 commentaires

Votre réponse est-elle même liée à quel propriétaire a demandé? S'il vous plaît aider Stackoverflow Conserver un bon contenu pour les développeurs.