Maison > Questions et réponses > le corps du texte
放假无聊在家看设计模式《head first系列》,今天看了工厂模式,分为三种:
简单工厂模式
工厂模式
抽象工厂模式
首先这3个奇葩的名字,我真是醉了,虽说干了很多年,但是真还没怎么用过,这些东西都是各类框架实现的技术,比如spring,jdbc以及log4j之类的,真实的业务场景我还真没咋用过,谁帮忙普及下。
别整网上那些没营养的例子,什么汽车啊,鸭子啊,披萨啊,真是无聊,难道都不是用数据库表存各种属性吗?非要建立出那么多类,可能是想帮助人理解吧,但实际业务场景压根没有啊,谁说出来我服谁?求喷!
我后续还有若干求喷文,希望大家踊跃的喷我~
迷茫2017-04-17 17:37:54
Il est compréhensible que vous ayez dit que cela n'est pas utilisé dans les affaires. Ne pensez pas non plus que seuls ceux dont les noms de classe sont Factory sont des usines, comme les objets UUID. Il existe actuellement 4 versions d'UUID, dont aucune n'est instanciée. par new.Ils sont instanciés via une usine. Produire différentes versions d'UUID. La raison de cette conception est généralement de résoudre le problème de la création d'un grand nombre de la même classe d'interface, ce qui est pratique pour une gestion unifiée. pour encoder le jeu de caractères
大家讲道理2017-04-17 17:37:54
Ce serait une tragédie si vous n’en rencontriez toujours pas après tant d’années de travail. Tout d’abord, vous pouvez envisager de changer d’emploi dans une grande entreprise et vous en rencontrerez une.
Le mode usine le plus simple est le changement de base de données relationnelle/non relationnelle, le changement de version et le changement de bibliothèque de classes. Attendez, la raison pour laquelle vous ne l'avez pas rencontré est qu'il n'y a pas besoin de post-maintenance ou qu'il n'est pas nécessaire de prendre en compte les itérations de version et les mises à jour de la base de données, n'est-ce pas ?
D'autres modèles de conception ont également leurs propres fonctions. Si vous ne rencontrez pas cette chose, cela ne vous semblera pas important. Si vous la rencontrez, vous sentirez que cette chose est si facile à utiliser, l'héritage et le polymorphisme très intelligemment.
De plus, les progrès des programmeurs consistent à étudier le code source du framework, le code source du langage, la grande concurrence et la maintenabilité du code.
高洛峰2017-04-17 17:37:54
Prenons un exemple de jdk. La classe Executors a une méthode statique de newFixedThreadPool. L'interface est définie comme suit :
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
Comme vous pouvez le voir, le deuxième paramètre peut être passé dans une fabrique de threads, puis la classe Executors peut créer les threads nécessaires au pool de threads en fonction de la méthode de fabrique. En d’autres termes, vous pouvez écrire toutes les règles de création de threads dans ThreadFactory. Par exemple, laissez les noms de thread créés par l'usine avoir le préfixe XXX, ou spécifiez la priorité du thread, etc.
Cela peut être considéré comme le scénario le plus courant du modèle d'usine, et il est largement utilisé dans divers cadres. Apprenez les modèles de conception et lisez davantage de code réel tout en lisant des livres, et vous découvrirez naturellement les fonctions spécifiques des modèles et même diverses techniques intelligentes.
黄舟2017-04-17 17:37:54
Qu'il s'agisse du modèle d'usine ou d'autres modèles de création, ils ont tous un seul but : initialiser un objet. En d’autres termes, afin de construire un modèle de structure de données (les classes et les objets eux-mêmes constituent une structure de données personnalisée).
Alors, voici la question : pourquoi pouvons-nous créer un objet de cette manière et utiliser un modèle de conception ? Essentiellement, la raison est que nous ne voulons pas que les utilisateurs de niveau supérieur utilisent directement new pour initialiser des objets. new
isole le processus de création d'objet des utilisateurs de niveau supérieur ou le processus de création d'objet est compliqué et difficile à maîtriser pour les utilisateurs<🎜 ; > ; Ou la création d'objets doit remplir certaines conditions Ces conditions peuvent être des besoins métier ou des contraintes système. Il n'est pas nécessaire que les utilisateurs de niveau supérieur les maîtrisent et augmentent la difficulté de développement par d'autres. Donc, à présent, nous devrions être clairs, qu'il s'agisse du mode usine ou du principe d'ouverture et de fermeture mentionné par les camarades ci-dessus, il s'agit d'isoler certains processus complexes afin que ces processus complexes ne soient pas exposés au monde extérieur. S'ils sont exposés, ces processus ajouteront des problèmes aux utilisateurs, ce que l'on appelle le travail d'équipe.
L'encapsulation orientée objet elle-même vise à rendre l'
externe aussi simple que possible.
API
Par exemple, vous définissez un champ
pour créer un objet puis attribuez une valeur à Status
, vous devrez inévitablement consulter la documentation de développement, ou vous risquez accidentellement de donner une valeur incorrecte. À ce stade, vous souhaiterez peut-être utiliser le modèle d'usine ou d'autres modèles de conception appropriés pour construire le code. new
Status
Par exemple, ceci :
public static class Factory
{
public static Ixxxxxx CreateWithOpen()
{
var obj = new Obj();
obj.Status = 1;
return obj;
}
public static Ixxxxxx CreateWithClose()
{
var obj = new Obj();
obj.Status = 2;
return obj;
}
}
Bien sûr, vous pouvez également utiliser des énumérations. Pour parler franchement, cela dépend des souhaits du concepteur.
Ainsi, le modèle de conception ne dit pas dans quel scénario il doit être utilisé. Pour être plus précis, il devrait l'être, lorsque vous utilisez le modèle de conception, peut-il apporter de la commodité aux membres de votre équipe, ou améliorer la qualité du code et. éviter certaines erreurs ? Si tel est le cas, utilisez-le. Si cela n’apporte que de la complexité et aucun avantage, alors oubliez-le.
En un mot, il n'est pas nécessaire de l'utiliser ou non, et il n'est pas nécessaire de l'utiliser. Son utilisation apportera des avantages, que ce soit pour l'équipe, la qualité du produit ou la maintenabilité du produit. Utilisez-le ou non, cela doit être un travail d'équipe et orienté produit. C'est l'exigence de base pour un concepteur de logiciels.