Maison Java javaDidacticiel Introduction aux modèles de conception Java

Introduction aux modèles de conception Java

Aug 20, 2019 pm 03:52 PM
java

Ce résumé est principalement basé sur ma précédente série d'articles sur les bases des modèles de conception. L'essentiel est d'expliquer les points de connaissances importants dans mes propres mots. Il peut y avoir des erreurs, j'espère donc que vous pourrez me pardonner et me donner quelques conseils.

Introduction aux modèles de conception Java

Modèle de conception

Modèle créatif

Le rôle du modèle de création est de créer un objet. Lorsqu'il s'agit de créer un objet, la chose la plus courante est de créer un nouvel objet, puis de définir les attributs associés. Cependant, dans de nombreux scénarios, nous devons fournir aux clients un moyen plus convivial de créer des objets, en particulier lorsque nous définissons des classes mais que nous devons les fournir à d'autres développeurs.

Boîtier unique

单例模式保证全局的单例类只有一个实例,这样的话使用的时候直接获取即可,比如数据库的一个连接,Spring里的bean,都可以是单例的。

单例模式一般有5种写法。

第一种是饿汉模式,先把单例进行实例化,获取的时候通过静态方法直接获取即可。缺点是类加载后就完成了类的实例化,浪费部分空间。

第二种是饱汉模式,先把单例置为null,然后通过静态方法获取单例时再进行实例化,但是可能有多线程同时进行实例化,会出现并发问题。

第三种是逐步改进的方法,一开始可以用synchronized关键字进行同步,但是开销太大,而后改成使用volatile修饰单例,然后通过一次检查判断单例是否已初始化,如果未初始化就使用synchronized代码块,再次检查单例防止在这期间被初始化,而后才真正进行初始化。

第四种是使用静态内部类来实现,静态内部类只在被使用的时候才进行初始化,所以在内部类中进行单例的实例化,只有用到的时候才会运行实例化代码。然后外部类再通过静态方法返回静态内部类的单例即可。

第五种是枚举类,枚举类的底层实现其实也是内部类。枚举类确保每个类对象在全局是唯一的。所以保证它是单例,这个方法是最简单的。
Copier après la connexion

Modèle d'usine

简单工厂一般是用一个工厂创建多个类的实例。

工厂模式一般是指一个工厂服务一个接口,为这个接口的实现类进行实例化

抽象工厂模式是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,接口又会包含多个实现类,通过一个工厂就可以把这些绑定在一起,非常方便。
Copier après la connexion

Motif prototype

一般通过一个实例进行克隆从而获得更多同一原型的实例。使用实例的clone方法即可完成。
Copier après la connexion

Modèle de constructeur

建造者模式中有一个概念叫做链式调用,链式调用为一个类的实例化提供便利,一般提供系列的方法进行实例化,实际上就是将set方法改造一下,将原本返回为空的set方法改为返回this实例,从而实现链式调用。

建造者模式在此基础上加入了builder方法,提供给外部进行调用,同样使用链式调用来完成参数注入。
Copier après la connexion

Modèle structurel

Le modèle de création précédent a introduit certains modèles de conception pour la création d'objets. La structure présentée dans cette section Le modèle. vise à réaliser le découplage en modifiant la structure du code, rendant notre code plus facile à maintenir et à développer.

Modèle d'adaptateur

Le modèle d'adaptateur est utilisé pour adapter deux classes différentes.

Similarités et différences entre le mode adaptateur et le mode proxy

Comparer ces deux modes revient en fait à comparer le mode adaptateur objet et le mode proxy,

Ils sont très. similaires. Tous nécessitent une instance d’une classe d’implémentation spécifique.

Mais leurs objectifs sont différents. Le mode proxy fait le travail d'amélioration de la méthode originale

L'adaptateur fait le travail d'adaptation, afin de fournir « emballer le poulet dans le canard, puis l'utiliser ; comme un canard",

Il n'y a pas de lien d'héritage entre les poules et les canards.

Le modèle d'adaptateur peut être divisé en adaptateur de classe, adaptateur d'objet, etc.

Un adaptateur de classe peut s'adapter à la classe parent en héritant de la classe parent.

L'adaptateur d'objet doit transmettre l'objet au constructeur d'un autre objet pour l'empaquetage.

Mode poids mouche

/ Le cœur du mode poids mouche est la classe d'usine de poids mouche,

// La fonction de la classe d'usine de poids mouche est de fournir un pool de poids mouche utilisé pour stocker des objets poids mouche,

// Lorsque l'utilisateur a besoin d'un objet, obtenez-le d'abord dans le pool de poids mouche,

// S'il n'existe pas dans le pool de poids mouche , créez-le Un nouvel objet flyweight est renvoyé à l'utilisateur,

// Enregistrez le nouvel objet dans le pool flyweight.

//Flyweight Pattern

// L'anglais est Flyweight Pattern. Je ne sais pas qui a traduit ce mot en premier. Je pense que cette traduction est vraiment difficile à comprendre. connexion. Flyweight signifie léger. Flyweight fait référence à des composants partagés, c'est-à-dire à la réutilisation d'objets déjà générés. Cette approche est bien sûr légère.

// Le moyen le plus simple de réutiliser des objets est d'utiliser un HashMap pour stocker chaque objet nouvellement généré. Chaque fois que vous avez besoin d'un objet, accédez d'abord au HashMap pour voir s'il existe. Sinon, générez un nouvel objet, puis placez cet objet dans le HashMap.

// Je ne démontrerai pas ce code simple.

Mode proxy

// Nous avons constaté qu'une telle chose n'existe pas, pour le dire franchement, le mode proxy consiste à faire du « packaging de méthodes » ou une « amélioration de méthodes ». ".

// En programmation orientée aspect, oubliez ce terme En AOP,

// est en fait le processus de proxy dynamique. Par exemple, au Spring,

// nous ne définissons pas nous-mêmes la classe proxy, mais Spring nous aidera à définir dynamiquement le proxy,

// puis à nous définir dans @Before, @After, @Around La logique du code est ajoutée dynamiquement à l'agent.

Mode Apparence

Le mode Apparence encapsule généralement des détails d'implémentation spécifiques pour fournir aux utilisateurs une interface plus simple.

Vous pouvez obtenir le contenu requis via un appel de méthode.

Mode composition

//Le mode combinaison est utilisé pour représenter les données avec une structure hiérarchique, rendant cohérent notre accès aux objets uniques et aux objets combinés.

//Regardons directement un exemple. Chaque employé a des attributs tels que le nom, le service et le salaire

// Il existe également une collection d'employés subordonnés (bien que la collection puisse l'être). vide),

// La structure des employés subordonnés est la même que la nôtre,

// a également des attributs tels que le nom et le département,

// a également une collection de leurs employés subordonnés.

class Employee {
    private String name;
    private String dept;
    private int salary;
    private List<Employee> subordinates; // 下属
}
Copier après la connexion

Modèle de décorateur

Décorateur

Le modèle de décorateur permet à chaque classe améliorée d'hériter de la classe parent de plus haut niveau. Ensuite, lorsqu'une amélioration des fonctionnalités est nécessaire, transmettez simplement l'instance de classe dans la classe améliorée, et la classe améliorée peut alors améliorer les fonctionnalités de la classe d'origine lorsqu'elle est utilisée.

Différent du mode proxy, en mode décorateur, chaque classe de décoration hérite de la classe parent et peut être encapsulée à plusieurs niveaux.

Modèle comportemental

Le modèle comportemental se concentre sur l'interaction entre les différentes classes, divisant clairement les responsabilités et rendant notre code plus clair.

Modèle de stratégie

Le modèle de stratégie considère généralement une stratégie comme une classe et la transmet dans l'instance où la stratégie doit être spécifiée, nous pouvons donc utiliser l'algorithme où Transmettez l’algorithme spécifié.

Mode Commande

Le mode commande est généralement divisé en trois rôles : initiateur de commande, commande et récepteur de commande.

L'initiateur de la commande doit injecter l'instance de commande lors de son utilisation. Exécutez ensuite l’appel de commande.

L'appel de commande appelle en fait la méthode du récepteur de commande pour effectuer l'appel réel.

Par exemple, un bouton de la télécommande équivaut à une commande. Lorsque le bouton est cliqué, la commande est exécutée et la méthode fournie par le téléviseur est automatiquement appelée.

Modèle de méthode modèle

La méthode modèle fait généralement référence à la fourniture d'un modèle de méthode, qui contient des classes d'implémentation et des classes abstraites, et spécifie l'ordre d'exécution.

Les classes d'implémentation sont de bonnes méthodes fournies par les modèles. Les classes abstraites nécessitent que les utilisateurs les implémentent eux-mêmes.

Les méthodes de modèle spécifient l'ordre d'exécution des méthodes dans un modèle, ce qui est très approprié pour certains frameworks de développement, de sorte que les méthodes de modèle sont également largement utilisées dans les frameworks open source.

Modèle d'observateur et mécanisme d'écoute des événements

Le modèle d'observateur est généralement utilisé pour l'abonnement aux données entre les abonnés et les éditeurs de messages.

Généralement divisés en observateurs et sujets. Les observateurs s'abonnent aux sujets et enregistrent les instances dans la liste d'observateurs maintenue par le sujet.

Lorsque le sujet met à jour les données, il transmet automatiquement les données à l'observateur ou informe l'observateur que les données ont été mises à jour.

Mais en raison de cette méthode, la relation de couplage du message push est relativement étroite. Et il est difficile de savoir quel est le type de données sans ouvrir les données.

Je sais que afin de rendre le format des données plus flexible, les modèles d'événement et d'écouteur d'événement ont été utilisés. Le type d'événement et les données d'événement du wrapper d'événement ont été découplés du sujet et de l'observateur.

Lorsqu'un événement se produit, le thème déclenche tous les auditeurs de l'événement et envoie l'événement à chaque auditeur via la liste des auditeurs. Après avoir écouté l'événement, il trouve d'abord le type d'événement correspondant en fonction du type d'événement. il prend en charge le gestionnaire d'événements, puis utilisez le gestionnaire pour traiter l'événement correspondant.

Modèle de chaîne de responsabilité

La chaîne de responsabilité doit généralement établir d'abord une liste chaînée unidirectionnelle, puis l'appelant n'a qu'à appeler le nœud principal, et il coulera automatiquement plus tard. Par exemple, l'approbation du processus est un bon exemple. Tant que l'utilisateur final soumet une candidature, une chaîne de responsabilité sera automatiquement établie en fonction des informations sur le contenu de la candidature, puis le flux pourra commencer

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles