Diverses personnes ont écrit des articles sur les modèles de conception du GoF et j'étudie toujours. Cependant, d'un autre côté, ces articles s'adressent à des personnes de haut niveau telles que «Il y a de tels avantages à concevoir cette classe» et «La méthode conventionnelle pose de tels problèmes», ceux qui peuvent partager les hypothèses dans une certaine mesure. J'ai eu l'impression que c'était un article pour, et en premier lieu, les débutants comme moi ne comprennent pas: "Je peux écrire comme ça à cause des spécifications du langage", "Si vous concevez une classe comme celle-ci, le programme fonctionnera comme ça" Je ne pense pas pouvoir trouver un article qui se concentre sur "ce qui peut être fait en premier".
Donc, cette fois, j'ai utilisé Design pattern appris en langage Java comme thème, et d'abord conçu du point de vue de "Java peut le faire grâce aux spécifications du langage". Regardons le modèle.
C'est une longue introduction, mais commençons. Connaissances de base (1) Types de variables Les variables gérées dans le modèle de conception du GoF peuvent être grossièrement divisées en les trois types suivants. De plus, les avantages et inconvénients de chacun sont considérés comme suit. Avantages de l'utilisation des variables | デC'est une longue introduction, mais commençons. Connaissances de base (1) Types de variables Les variables gérées dans le modèle de conception du GoF peuvent être grossièrement divisées en les trois types suivants. De plus, les avantages et inconvénients de chacun sont considérés comme suit. Avantages de l'utilisation des variables | ||
---|---|---|---|
Type entier (int,booléen etc.) | 8 | 8 | 8 |
Classe officielle ou type de base (double,Chaîne etc.) |
5 | 6 | 3 |
Cours sur mesure | 2 | 3 | 3 |
Il existe quatre façons de gérer les variables dans une méthode: La plage qui peut être manipulée et les points à noter lors de la manipulation de chacun sont décrits. En ce qui concerne les points à noter, je pense que cela s'écarte du sujet principal de l'article, mais d'un autre côté, je pense que les mérites du modèle de conception ne seront visibles que si je comprends les caractéristiques, donc je le posterai pour le moment.
Type de variable | Gamme maniable | point important |
---|---|---|
Variables locales | Dans la méthode | C'est l'utilisation la plus recommandée, mais d'un autre côté, si vous sécurisez dynamiquement une grande classe avec du nouveau à chaque fois, le coût de calcul peut augmenter, veuillez donc consulter les performances. |
Variables de membre | Dans des instances individuelles ( static Si vous ajoutez, toutes les classes seront partagées) |
C'est une variable globale dont l'accès est limité, alors ne la créez pas inutilement. Ne réutilisez jamais les variables de compteur. |
argument | Fonction côté utilisateur | Essayez de ne pas changer l'état de la fonction autant que possible (si attaché)const 修飾子を付ける).また,複数ステータスを持つような大きなクラスをargumentにするのはなるべくやめましょう. |
Valeur de retour | Fonction côté utilisateur | Comme pour l'argument, ne le renvoyez pas dans une très grande classe. |
Qualificatif | Modifiable | Comment utiliser |
---|---|---|
static | Variables de membre/une fonction | 2 |
public | Variables de membre/une fonction | 2 |
plivate | Variables de membre/une fonction | 2 |
protected | Variables de membre/une fonction | 2 |
@Override | Fonction membre | 2 |
abstract | Fonction membre | Ah |
final | Fonction membre | Ah |
Qualificatif | Position d'insertion | Comment utiliser |
---|---|---|
extends | Après la déclaration de classe | Il s'agit d'un modificateur pour hériter de la classe suivante extend. est-Soyons conscients de la relation d'un. Une seule classe peut être héritée. |
abstract | Avant la déclaration de classe | Il s'agit d'un modificateur qui vous empêche de créer une instance d'une classe avec abstract. Vous pouvez en hériter sans cela, mais ajoutez-le si nécessaire pour réduire les erreurs. |
final | Avant la déclaration de classe | Les classes avec final ne peuvent pas être héritées. Il n'y a pas de problème si vous n'ajoutez pas ceci, mais ajoutons-le à la toute dernière classe que vous ne voulez pas écraser. |
implements | Après la déclaration de classe | Un modificateur pour implémenter l'interface. pouvez-Soyons conscients de la relation de faire. Contrairement à extend, plusieurs interfaces peuvent être implémentées (héritage multiple). |
inteface | Au lieu de la déclaration de classe | En fait, ce n'est pas un modificateur de classe, mais il est bien arrangé, donc ici. Un type qui peut être écrit à la place de la classe et ne peut définir que des méthodes. La différence avec la classe abstraite est que vous ne pouvez pas définir de variables membres. |
baseA.java
public class baseA {
public void func() {}
}
A.java
public class A extends baseA {
public void func() {System.out.println("A");}
}
A_.java
public class A_ extends baseA {
public void func() {System.out.println("A_");}
}
Main.java
public class Main {
public static void main(String[] args) {
baseA a;
a = new A();
a.func();
baseA a_;
a_= new A_();
a_.func();
}
}
Résultat d'exécution
A
A_
Mettez en commentaire la func
implémentée dans la précédente baseA
.
baseA.java
public class baseA {
//public void func() {}
}
Ensuite, cela compilera, mais
OK.java
A a;
a.func();
Cela entraînera une erreur de compilation.
NG.java
baseA a;
a = new A();
a.func();
Désolé, j'ai publié un brouillon en cours de création en raison d'une erreur d'opération. Après vérification, il semble qu'une fois posté, il ne peut plus être rédigé, je vais donc compléter l'article au plus vite. D'ici là, ce sera un désordre pour tout le monde, mais merci pour votre coopération.
Recommended Posts