Iterater
Accédez aux éléments dans l'ordre, comme un tableau.
hasNext ()
retourne avec booléen s'il contient les éléments suivants: Ensuite, vérifiez les éléments et exécutez next ()
next ()
accède à l'élément suivant
Adopter
Éliminez les écarts entre les API
La réutilisation est améliorée en créant des pièces qui peuvent être insérées entre les deux API pour éliminer l'écart. Implémentez l'interface souhaitée (API) sans apporter aucun ajustement aux classes existantes
Template Method
Le cadre de traitement est décidé dans la super classe et le traitement spécifique est décrit dans la sous-classe.
La logique peut être partagée.
La classe parente est définie par une classe abstraite. S'il s'agit d'une interface, la classe parente ne peut pas écrire le processus.
Factory Method
Définissez l'instanciation dans la classe parente (ne définissez pas de nom de classe spécifique). Dans la classe enfant, la chair est faite.
Singleton
Un seul instancier En rendant le constructeur privé, vous pouvez empêcher l'instanciation en dehors de la classe. La seule façon d'accéder à une instance est de ne renvoyer qu'une seule instance avec getInstance ().
private static Singleton singleton = null;
if(singleton == null){
singleton = new Singleton;
}
Avec l'expression conditionnelle, plusieurs instances peuvent être créées en fonction de l'état de la machine lorsqu'elle est exécutée dans plusieurs threads. Rendez-le asynchrone ou créez-le à l'avance.
Prototype
Copiez et créez une instance.
La méthode de clonage est une copie superficielle. Remplacez et implémentez la copie complète, qui copie le contenu de l'instance. shallow copy copie simplement le contenu des champs de l'instance tels quels. La méthode clone ne s'initialise pas, elle doit donc être initialisée séparément.
Builder
Créez la structure entière dans la classe parente et construisez pas à pas un traitement complexe En augmentant l'indépendance, il est plus facile de comprendre les corrections et les ajouts.
Abstract Factory
Utilisez des usines abstraites et des parties abstraites.
Il est facile d'ajouter une usine de béton. Difficile d'ajouter de nouvelles pièces (pour toute l'usine de béton)
Bridge
Séparez les fonctions et les implémentations et reliez-les. Fonction: traitement, etc. Implémentation: Classe lorsqu'elle est utilisée pour l'implémentation
Si vous augmentez le nombre de fonctions, toutes les fonctions seront ajoutées à la classe d'implémentation, il sera donc plus facile d'augmenter les fonctions.
La mise en œuvre étant souvent compliquée, elle n'est utilisée que lorsque la partie de mise en œuvre est fréquemment modifiée. Par exemple, comment gérer la dépendance au système d'exploitation Vous pouvez modifier l'implémentation sans modifier la fonctionnalité.
Facade
Simplifiez l'interface. Cachez le traitement compliqué. Il sert de fenêtre pour un traitement compliqué.
Rendre uniquement le package accessible
//public
public class Sample{
}
//Rendez-le accessible uniquement dans le package.
class Sample{
}
Strategy
L'algorithme peut être modifié. En utilisant la délégation, la connexion est plus faible que l'héritage et l'algorithme peut être facilement modifié.
Composite
Faites-en une structure en bois. Identifiez le conteneur et le contenu pour créer une structure récursive. composite-> "mélange" "composite"
FileDirectory Le répertoire de fichiers contient des fichiers et des répertoires. Lorsque vous regardez les fichiers dans l'ordre, assimilez-les à des sous-répertoires ou des fichiers.
Le répertoire peut accéder à Entry de manière récursive. Si le fichier est une structure arborescente, laisse Le répertoire est une branche.
Decorator
Depuis le cœur de la fonction, couvrez-la d'une peau à l'autre et ajoutez-la. Des fonctions peuvent être ajoutées sans ajouter de contenu. En utilisant la délégation, un couplage lâche est possible et des fonctions dynamiques peuvent être ajoutées. Tout en conservant l'interface transparente (API), nous ajouterons des fonctions en couvrant avec des objets.
Le nombre de petites classes augmentera.
class Parent {
...
void parentMethod(){
...
}
}
class Child extends Parent {
...
void childMethod(){
...
}
}
Parent obj = new Child(); obj.parentMethod(); Une instance de Child peut être affectée à une variable de type Parent telle quelle. Vous pouvez appeler des méthodes héritées de Parent. En d'autres termes Traite une instance de Child comme s'il s'agissait d'une instance de Parent. </ font> </ strong> Ceci est un exemple de considérer une sous-classe comme une superclasse
Parent obj = new Child(); ((Child)obj).childMethod();
Si l'interface est transparente à l'aide de la délégation, vous pouvez vous assimiler à la destination de la délégation.
class Rose {
Violet obj = ...
void method(){
obj.method();
}
}
class Violet {
void method(){
...
}
}
Rose et Violet ont la même méthode, et Rose délègue à Violet ... mais il n'est pas précisé que ce sont des méthodes courantes.
abstract class Flower {
abstract void method();
}
interface Flower {
abstract void method();
}
Peut être spécifié comme ci-dessus Utiliser correctement selon le cas.
Visitor
Structure et traitement des données séparés. Créez une classe de visiteur qui visite la structure de données et demandez à cette classe de la gérer.
Effectue un traitement spécifique sur l'élément contenant la structure de données. Le modèle Visiteur améliore l'indépendance des classes File et Directory en tant que parties. Si vous programmez le contenu du processus comme une méthode de la classe File ou Directory, vous devrez modifier la classe File ou Directory à chaque fois que vous voudrez ajouter un nouveau "processus" et étendre la fonction.
Si la classe parent est vraie pour l'expression relationnelle, alors la petite classe dérivée de la classe parent est également vraie. (Possibilité de substitution)
The Open-Closed Principle N'interdisez pas l'expansion future à moins que vous n'ayez une raison spécifique de le faire. Mais vous ne pouvez pas avoir à modifier une classe existante chaque fois que vous l'étendez.
En d'autres termes, autoriser l'extension des classes existantes sans modification </ strong> C'est.
Les classes hautement réutilisables sont fermées. Les chaînes sont fermées car elles sont hautement réutilisables et inefficaces lorsqu'elles sont développées. (Ne peut pas être étendu car il est défini dans la classe finale)
Recommended Posts