Maison  >  Article  >  Java  >  Apprentissage de modèles de méthodes d'usine Java

Apprentissage de modèles de méthodes d'usine Java

黄舟
黄舟original
2017-10-13 10:25:051487parcourir

Cet article présente principalement le modèle de méthode d'usine de l'apprentissage du modèle de conception Java, qui a une certaine valeur de référence. Les amis intéressés peuvent se référer à

Modèle de méthode d'usine (méthode d'usine) : définir un utilisateur Une interface pour créer des objets. , laissant les sous-classes décider quelle classe instancier. Les méthodes d'usine permettent de différer l'instanciation d'une classe vers ses sous-classes.

Diagramme de structure du modèle de méthode d'usine :

Exigences du projet, créer une usine Lei Feng, où les étudiants peuvent aider les autres, et les bénévoles peuvent également aider les autres à le faire des choses.

1 : Créez une classe Lei Feng avec pour fonctions d'aider les autres à balayer le sol, à faire la lessive et à acheter du riz.


package FactoryMethodModel;

public class LeiFeng {

 public void Sweep(){
  System.out.println("扫地");
 }
 
 public void Wash(){
  System.out.println("洗衣");
 }
 
 public void BuyRice(){
  System.out.println("买米");
 }
}

2 : Créez une classe pour les étudiants qui apprennent de Lei Feng, héritent de la classe Lei Feng et ajoutent vos propres fonctions.


package FactoryMethodModel;

/**
 * 学雷锋的大学生
 * @author 我不是张英俊
 *
 */
public class UniversityStudent extends LeiFeng {
//里面可以增加专属大学生的功能
}

3 : Créer une classe de bénévoles communautaires qui hérite de la classe Lei Feng.


package FactoryMethodModel;

/**
 * 学雷锋的社区人员
 * @author 我不是张英俊
 *
 */
public class Volunteer extends LeiFeng {

}

4 : Créer une interface d'usine Lei Feng.


package FactoryMethodModel;

/**雷锋工厂的总接口。
 * @author 我不是张英俊
 *
 */
interface LeiFengFactory {
 LeiFeng CreatLenFeng();
}

5 : Créer une usine pour les étudiants qui apprennent de Lei Feng.


package FactoryMethodModel;

/**
 * 学雷锋的大学生工厂
 * @author 我不是张英俊
 *
 */
public class UniversityStudentFactory implements LeiFengFactory {

 @Override
 public LeiFeng CreatLenFeng() {
  return new UniversityStudent();
 }

 
}

6 : Créer une usine de bénévoles qui apprend de Lei Feng.


package FactoryMethodModel;

/**
 * 学雷锋的社区制志愿者
 * @author 我不是张英俊
 *
 */
public class VolunteerFactory implements LeiFengFactory {

 @Override
 public LeiFeng CreatLenFeng() {
 // TODO Auto-generated method stub
 return new Volunteer();
 }

 
}

7 : Classe de test


package FactoryMethodModel;

/**
 * 建立一个雷锋工厂,大学生可以以雷锋的名义起帮助别人,社区志愿者也可以。
 * 工厂化模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
 * 工厂方法使一个类的实例化延迟到其子类。
 * @author 我不是张英俊
 *
 */
public class Test {

 public static void main(String[] args) {
 
 LeiFengFactory factory=new UniversityStudentFactory();
 LeiFeng student =factory.CreatLenFeng();
 
 student.BuyRice();
 student.Sweep();
 student.Wash();
 }

}

8 : Console

Achat riz
Balayer le sol
Lessive

Résumé : La méthode d'usine simple viole le principe ouvert-fermé, tandis que la méthode d'usine surmonte ce problème lorsqu'il faut en ajouter de nouveaux, comme les élèves du primaire apprennent de Lei Feng Le moment venu, ajoutez simplement une nouvelle usine d'élèves du primaire à la méthode d'usine, puis appelez-la dans la classe de test.

Le modèle de méthode d'usine conserve également l'avantage d'encapsuler le processus de création d'objet. Cela permet de remplacer l'objet sans apporter de modifications, ce qui réduit le couplage entre le programme client et l'objet produit. Le modèle de méthode d'usine est une abstraction et une promotion supplémentaires du modèle d'usine simple. Grâce à l'utilisation du polymorphisme, le modèle d'usine conserve les avantages du modèle d'usine simple et surmonte les inconvénients. Mais l'inconvénient est que sans ajouter de produit, une classe d'usine doit être ajoutée, ce qui augmente la quantité de développement supplémentaire.

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:
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