Home Java javaTutorial In-depth analysis of Java factory pattern: implementation of three creational design patterns

In-depth analysis of Java factory pattern: implementation of three creational design patterns

Dec 28, 2023 am 09:47 AM
Three ways to achieve java factory pattern Creational design pattern

In-depth analysis of Java factory pattern: implementation of three creational design patterns

Factory Pattern is a commonly used creational design pattern that provides a way to encapsulate object creation for higher flexibility and maintainability. . In Java programming, the factory pattern is often used to create objects of different types without exposing the specific logic of creating the objects.

This article will provide an in-depth analysis of the Java factory pattern and discuss the three implementation methods of the factory pattern.

1. Simple Factory Pattern
Simple Factory Pattern is one of the most basic and common factory patterns. It implements the creation of objects through a factory class, and encapsulates the creation process of specific objects in the factory class.

The following is a sample code of a simple factory pattern:

public class SimpleFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ConcreteProductA();
            case "B":
                return new ConcreteProductB();
            default:
                throw new IllegalArgumentException("Invalid product type: " + type);
        }
    }
}

public interface Product {
    void operation();
}

public class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("This is product A.");
    }
}

public class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("This is product B.");
    }
}

// Client
public class Main {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        Product productB = SimpleFactory.createProduct("B");

        productA.operation();
        productB.operation();
    }
}
Copy after login

In the above code, SimpleFactory is a factory class that creates specific product objects based on the passed in parameter type. Then, the client gets the required product object by calling the static method createProduct of SimpleFactory. By using the factory pattern, the client can separate the creation process of specific product objects from the client code, providing higher flexibility and maintainability.

But the disadvantage of the simple factory pattern is that if you want to add a new product type, you need to modify the code of the factory class. This violates the "open-closed principle", which is open to extension and closed to modification.

2. Factory Method Pattern
Factory Method Pattern is a more flexible factory pattern. It defines an abstract factory interface and allows specific factory classes to implement the interface. to create different types of product objects.

The following is a sample code of the factory method pattern:

public interface Factory {
    Product createProduct();
}

public class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

public class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// Client
public class Main {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Factory factoryB = new ConcreteFactoryB();

        Product productA = factoryA.createProduct();
        Product productB = factoryB.createProduct();

        productA.operation();
        productB.operation();
    }
}
Copy after login

In the above code, Factory is an abstract factory interface that defines a method for creating product objects. ConcreteFactoryA and ConcreteFactoryB are specific factory classes, respectively responsible for creating specific product objects. The client obtains the required product object by instantiating a specific factory class and then calling its createProduct method.

The advantage of the factory method pattern compared to the simple factory pattern is that by introducing the factory interface and specific factory classes, the system can be expanded and new product types can be added without modifying the existing code. At the same time, the factory method pattern also satisfies the "open-closed principle".

3. Abstract Factory Pattern
The Abstract Factory Pattern is a creational design pattern that provides an interface for creating a series of related or interdependent objects without specifying specific classes. .

The following is a sample code of the abstract factory pattern:

public interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

public class ConcreteFactory1 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB1();
    }
}

public class ConcreteFactory2 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB2();
    }
}

public interface ProductA {
    void operationA();
}

public interface ProductB {
    void operationB();
}

public class ConcreteProductA1 implements ProductA {
    @Override
    public void operationA() {
        System.out.println("This is product A1.");
    }
}

public class ConcreteProductA2 implements ProductA {
    @Override
    public void operationA() {
        System.out.println("This is product A2.");
    }
}

public class ConcreteProductB1 implements ProductB {
    @Override
    public void operationB() {
        System.out.println("This is product B1.");
    }
}

public class ConcreteProductB2 implements ProductB {
    @Override
    public void operationB() {
        System.out.println("This is product B2.");
    }
}

// Client
public class Main {
    public static void main(String[] args) {
        AbstractFactory factory1 = new ConcreteFactory1();
        AbstractFactory factory2 = new ConcreteFactory2();

        ProductA productA1 = factory1.createProductA();
        ProductB productB1 = factory1.createProductB();

        ProductA productA2 = factory2.createProductA();
        ProductB productB2 = factory2.createProductB();

        productA1.operationA();
        productB1.operationB();

        productA2.operationA();
        productB2.operationB();
    }
}
Copy after login

In the above code, AbstractFactory is an abstract factory interface that defines a series of methods for creating product objects. ConcreteFactory1 and ConcreteFactory2 are specific factory classes, respectively responsible for creating a series of related product objects. ProductA and ProductB are abstract product interfaces that define methods of product objects. ConcreteProductA1, ConcreteProductA2, ConcreteProductB1 and ConcreteProductB2 are specific product classes, which are respectively responsible for implementing the methods defined by the abstract product interface.

The advantage of the abstract factory pattern is that the product creation code can be hidden in a specific factory class. The client only needs to care about the abstract factory interface and does not need to care about the specific factory and product implementation. At the same time, the abstract factory pattern also satisfies the "open-closed principle".

Summary
The factory pattern is a common design pattern for creating objects and is widely used in Java programming. This article analyzes three implementation methods of the factory pattern: simple factory pattern, factory method pattern and abstract factory pattern. Different implementation methods are suitable for different scenarios, and the appropriate factory model can be selected according to specific needs.

The factory pattern provides higher flexibility and maintainability by encapsulating the object creation process, and satisfies the "open-closed principle". It is a recommended design pattern that can be used to improve the scalability and maintainability of your code.

The above is the detailed content of In-depth analysis of Java factory pattern: implementation of three creational design patterns. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1662
14
PHP Tutorial
1261
29
C# Tutorial
1234
24
Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Apr 19, 2025 pm 04:51 PM

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

How do I convert names to numbers to implement sorting and maintain consistency in groups? How do I convert names to numbers to implement sorting and maintain consistency in groups? Apr 19, 2025 pm 11:30 PM

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

How to simplify field mapping issues in system docking using MapStruct? How to simplify field mapping issues in system docking using MapStruct? Apr 19, 2025 pm 06:21 PM

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? Apr 19, 2025 pm 11:45 PM

Start Spring using IntelliJIDEAUltimate version...

How to safely convert Java objects to arrays? How to safely convert Java objects to arrays? Apr 19, 2025 pm 11:33 PM

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

How to elegantly obtain entity class variable names to build database query conditions? How to elegantly obtain entity class variable names to build database query conditions? Apr 19, 2025 pm 11:42 PM

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How to use the Redis cache solution to efficiently realize the requirements of product ranking list? How to use the Redis cache solution to efficiently realize the requirements of product ranking list? Apr 19, 2025 pm 11:36 PM

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products? E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products? Apr 19, 2025 pm 11:27 PM

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...

See all articles