Maison  >  Article  >  Java  >  Comment utiliser le modèle d'usine Java pour créer des objets et améliorer la réutilisation et la flexibilité du code

Comment utiliser le modèle d'usine Java pour créer des objets et améliorer la réutilisation et la flexibilité du code

WBOY
WBOYavant
2023-05-14 08:25:05788parcourir

Introduction

Les modèles de conception d'usine Java sont principalement divisés en trois types :

Modèle d'usine simple : utilisez une classe d'usine pour encapsuler le processus de création d'objet, et le client n'a besoin que de transmettre différents paramètres pour obtenir différents objets de produits, évitant ainsi le création directe d'objets produit par le client

Modèle de méthode d'usine : abstrait la classe d'usine, chaque classe de produit spécifique correspond à une classe d'usine spécifique et la classe d'usine crée celle correspondante par polymorphisme. Pour les objets produit, le client n'a besoin que de connaître l'usine interface et sa classe d'implémentation, et peut changer dynamiquement l'implémentation de l'usine en fonction des besoins, avec une meilleure évolutivité.

Modèle d'usine abstrait : basé sur le modèle de méthode d'usine, abstrait à nouveau la classe d'usine, placez plusieurs interfaces d'usine dans une seule interface d'usine, chacune. un produit spécifique correspond à une classe d'usine spécifique et crée des objets de produit correspondants grâce au polymorphisme, qui a une meilleure évolutivité et un degré d'abstraction plus élevé, mais augmente également la complexité du système

Modèle d'usine simple

Définissez d'abord une classe de produit abstraite :

package com.fanqiechaodan.factory.simple.product;
/**
 * @Classname Product
 * @Description 抽象产品类
 */
public abstract class Product {
    public abstract void use();
}

Ensuite, définissez la classe de produit spécifique

public class ProductA extends Product{
    @Override
    public void use() {
        System.out.println("使用具体产品类A...");
    }
}
public class ProductB extends Product{
    @Override
    public void use() {
        System.out.println("使用具体产品类B...");
    }
}
public class ProductC extends Product{
    @Override
    public void use() {
        System.out.println("使用具体产品类C...");
    }
}

Puis définissez la classe d'usine pour créer différents produits

package com.fanqiechaodan.factory.simple.factory;
import com.fanqiechaodan.factory.simple.product.Product;
import com.fanqiechaodan.factory.simple.product.ProductA;
import com.fanqiechaodan.factory.simple.product.ProductB;
import com.fanqiechaodan.factory.simple.product.ProductC;
/**
 * @Classname SimpleFactory
 * @Description 工厂类
 */
public class SimpleFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ProductA();
            case "B":
                return new ProductB();
            case "C":
                return new ProductC();
            default:
                throw new RuntimeException("不支持的产品类型:" + type);
        }
    }
}

Test:

package com.fanqiechaodan.factory.simple;
import com.fanqiechaodan.factory.simple.factory.SimpleFactory;
import com.fanqiechaodan.factory.simple.product.Product;
/**
 * @Classname Demo
 * @Description 简单工厂模式
 */
public class Demo {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.use();
        Product productB = SimpleFactory.createProduct("B");
        productB.use();
        Product productC = SimpleFactory.createProduct("C");
        productC.use();
        Product productD = SimpleFactory.createProduct("D");
        productD.use();
    }
}

Comment utiliser le modèle dusine Java pour créer des objets et améliorer la réutilisation et la flexibilité du code

Modèle de méthode d'usine

Définissez d'abord une interface pour représenter le produit

package com.fanqiechaodan.factory.method.product;
/**
 * @Classname Product
 * @Description 产品接口
 */
public interface Product {
    void use();
}

Deuxièmement, définissez deux classes d'implémentation de produit

public class ProductA implements Product{
    @Override
    public void use() {
        System.out.println("使用具体产品A...");
    }
}
public class ProductB implements Product{
    @Override
    public void use() {
        System.out.println("使用具体产品B...");
    }
}

Ensuite, définissez une interface d'usine pour créer des produits

package com.fanqiechaodan.factory.method.factory;
import com.fanqiechaodan.factory.method.product.Product;
/**
 * @Classname Factory
 * @Description 工厂接口
 */
public interface Factory {
    Product createProduct();
}

Ensuite, définissez deux classes d'implémentation d'usine spécifiques, qui sont utilisées pour créer différents produits

public class FactoryA implements Factory{
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}
public class FactoryB implements Factory{
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

Test

package com.fanqiechaodan.factory.method.factory;
import com.fanqiechaodan.factory.method.product.Product;
import com.fanqiechaodan.factory.method.product.ProductB;
/**
 * @Classname FactoryB
 * @Description 工厂实现类B
 */
public class FactoryB implements Factory{
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

Comment utiliser le modèle dusine Java pour créer des objets et améliorer la réutilisation et la flexibilité du code

Modèle d'usine abstrait

Première définition le produit abstrait

public interface ProductA {
    void doSomething();
}
public interface ProductB {
    void doSomething();
}

Deuxièmement, définissez le produit spécifique

public class ProductA1 implements ProductA{
    @Override
    public void doSomething() {
        System.out.println("ProductA1 doSomething ...");
    }
}
public class ProductA2 implements ProductA{
    @Override
    public void doSomething() {
        System.out.println("ProductA2 doSomething ...");
    }
}
public class ProductB1 implements ProductB{
    @Override
    public void doSomething() {
        System.out.println("ProductB1 doSomething ...");
    }
}
public class ProductB2 implements ProductB{
    @Override
    public void doSomething() {
        System.out.println("ProductB2 doSomething ...");
    }
}

Puis définissez l'usine abstraite

package com.fanqiechaodan.factory.abstractfactory.factory;
import com.fanqiechaodan.factory.abstractfactory.product.ProductA;
import com.fanqiechaodan.factory.abstractfactory.product.ProductB;
/**
 * @Classname AbstractFactory
 * @Description 抽象工厂
 */
public interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

Définissez ensuite l'usine spécifique

public class Factory1 implements AbstractFactory{
    @Override
    public ProductA createProductA() {
        return new ProductA1();
    }
    @Override
    public ProductB createProductB() {
        return new ProductB1();
    }
}
public class Factory2 implements AbstractFactory{
    @Override
    public ProductA createProductA() {
        return new ProductA2();
    }
    @Override
    public ProductB createProductB() {
        return new ProductB2();
    }
}

Test

package com.fanqiechaodan.factory.abstractfactory;
import com.fanqiechaodan.factory.abstractfactory.factory.AbstractFactory;
import com.fanqiechaodan.factory.abstractfactory.factory.Factory1;
import com.fanqiechaodan.factory.abstractfactory.factory.Factory2;
import com.fanqiechaodan.factory.abstractfactory.product.ProductA;
import com.fanqiechaodan.factory.abstractfactory.product.ProductB;
/**
 * @Classname Demo
 * @Description 抽象工厂模式
 */
public class Demo {
    public static void main(String[] args) {
        // 使用具体工厂1创建产品A和产品B
        AbstractFactory factory1 = new Factory1();
        ProductA productA1 = factory1.createProductA();
        ProductB productB1 = factory1.createProductB();
        productA1.doSomething();
        productB1.doSomething();
        // 使用具体工厂2创建产品A和产品B
        AbstractFactory factory2 = new Factory2();
        ProductA productA2 = factory2.createProductA();
        ProductB productB2 = factory2.createProductB();
        productA2.doSomething();
        productB2.doSomething();
    }
}

Comment utiliser le modèle dusine Java pour créer des objets et améliorer la réutilisation et la flexibilité du code

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer