Home Java JavaBase What are the three factory patterns in java?

What are the three factory patterns in java?

Nov 02, 2020 pm 02:23 PM
java Factory pattern

Java's three factory patterns: 1. Simple factory pattern, which provides a function to create object instances without caring about its specific implementation; 2. Factory method pattern; 3. Abstract factory pattern, which provides a function to create an object instance. An interface for a family of related or interdependent objects without specifying their concrete classes.

What are the three factory patterns in java?

(Recommended tutorial: java introductory tutorial)

1. Simple factory pattern

Definition of simple factory: Provides a function to create object instances without caring about its specific implementation. The type of the created instance can be an interface, an abstract class, or a specific class

Implementing the car interface

1

2

3

public interface Car {

    String getName();

}

Copy after login

Benz class

1

2

3

4

5

6

public class Benz implements Car {

    @Override

    public String getName() {

        return "Benz";

    }

}

Copy after login

BMW type

1

2

3

4

5

6

public class BMW implements Car {

    @Override

    public String getName() {

        return "BMW";

    }

}

Copy after login

Simple factory that can produce both BMW and Mercedes-Benz

1

2

3

4

5

6

7

8

9

10

11

12

public class SimpleFactory {

    public Car getCar(String name){

        if (name.equals("BMW")){

            return new BMW();

        }else if (name.equals("benz")){

            return new Benz();

        }else {

            System.out.println("不好意思,这个品牌的汽车生产不了");

            return null;

        }

    }

}

Copy after login

Test class

1

2

3

4

5

6

7

public class SimpleFactoryTest {

    public static void main(String[] args){

        SimpleFactory simpleFactory = new SimpleFactory();

        Car car = simpleFactory.getCar("BMW");

        System.out.println(car.getName());

    }

}

Copy after login

Test result

1

BMW

Copy after login

According to the definition of a simple factory, users only need the product and don’t care how the product is produced, and it looks perfect. But think about it, are there any factories in this world that produce everything?

Obviously does not exist. Every car brand has its own production factory and its own production technology. Mapping to the spring framework, we have many types of beans that need to be produced. If we only rely on a simple factory to implement it, how many if..else ifs do we have to nest in the factory class?

Moreover, when we produce a car in the code, it just comes out with a new one, but in actual operation we don’t know how many operations are required. Loading, registration and other operations will be reflected in the factory class, so this class It will become chaotic and inconvenient to manage, so each brand should have its own production category.

Because it is dedicated, it is professional. At this time, the factory method appeared.

2. Factory method pattern

Factory interface

1

2

3

4

//定义一个工厂接口,功能就是生产汽车

public interface Factory {

    Car getCar();

}

Copy after login

Benz factory

1

2

3

4

5

6

public class BenzFactory implements Factory {

    @Override

    public Car getCar() {

        return new Benz();

    }

}

Copy after login

BMW Factory

1

2

3

4

5

6

public class BMWFactory implements Factory{

    @Override

    public Car getCar() {

        return new BMW();

    }

}

Copy after login

Test category

1

2

3

4

5

6

7

8

public class FactoryTest {

   public static void main(String[] args){

       Factory bmwFactory = new BMWFactory();

       System.out.println(bmwFactory.getCar().getName());

       Factory benzFactory = new BenzFactory();

       System.out.println(benzFactory.getCar().getName());

   }

}

Copy after login

Test result

1

2

BMW

Benz

Copy after login

According to the above It can be seen from the code that cars of different brands are produced by different factories, and they seem to be perfect. But if you look at the test category, when a person wants to buy a BMW car (assuming there is no seller), then he has to go to the BMW factory to produce one for him, and a few days later he wants to buy a Mercedes-Benz. When buying a car, you have to go to the Mercedes-Benz factory to hire someone to produce it, which undoubtedly increases the complexity of the user's operation. So is there a user-friendly method? At this time, the abstract factory pattern appeared.

3. Abstract Factory Pattern

Abstract Factory

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public abstract class AbstractFactory {

 

     protected abstract Car getCar();

      

     //这段代码就是动态配置的功能

     //固定模式的委派

     public Car getCar(String name){

        if("BMW".equalsIgnoreCase(name)){

            return new BmwFactory().getCar();

        }else if("Benz".equalsIgnoreCase(name)){

            return new BenzFactory().getCar();

        }else if("Audi".equalsIgnoreCase(name)){

            return new AudiFactory().getCar();

        }else{

            System.out.println("这个产品产不出来");

            return null;

        }

    }

}

Copy after login

Default Factory

1

2

3

4

5

6

7

8

9

public class DefaultFactory extends AbstractFactory {

 

    private AudiFactory defaultFactory = new AudiFactory();

     

    public Car getCar() {

        return defaultFactory.getCar();

    }

 

}

Copy after login

BMW Factory

1

2

3

4

5

6

public class BMWFactory extends AbstractFactory {

    @Override

    public Car getCar() {

        return new BMW();

    }

}

Copy after login

Benz Factory

1

2

3

4

5

public class BenzFactory extends AbstractFactory {

    @Override    public Car getCar() {

            return new Benz();

    }

}

Copy after login

Test Class


1

2

3

4

5

6

public class AbstractFactoryTest {

    public static void main(String[] args) {        

        DefaultFactory factory = new DefaultFactory();        

        System.out.println(factory.getCar("Benz").getName());            

    }

}

Copy after login

Test results

1

Benz

Copy after login

As can be seen from the above code, if the user needs a car, he only needs to go to the default factory to put forward his needs (incoming parameters ), you can get the products you want without having to find different production factories based on the products, which is convenient for users to operate.

Note: Some people sneer at design patterns, and some people respect them as gods, but I agree with them.

According to my rough understanding, the classic thing about design patterns is that it solves the pain of both the person who writes the code and the person who calls the code. Different design patterns are only applicable to Different scenarios. As for whether to use it or not, and how to use it, you need to consider it carefully.

But you shouldn’t use it just for the sake of using it. The subtleties can only be left to everyone to taste slowly.

For more programming-related knowledge, please visit: Programming Courses! !

The above is the detailed content of What are the three factory patterns in java?. 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)

Perfect Number in Java Perfect Number in Java Aug 30, 2024 pm 04:28 PM

Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

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

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Smith Number in Java Smith Number in Java Aug 30, 2024 pm 04:28 PM

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

Java Spring Interview Questions Java Spring Interview Questions Aug 30, 2024 pm 04:29 PM

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Java Program to Find the Volume of Capsule Java Program to Find the Volume of Capsule Feb 07, 2025 am 11:37 AM

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

Create the Future: Java Programming for Absolute Beginners Create the Future: Java Programming for Absolute Beginners Oct 13, 2024 pm 01:32 PM

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.

See all articles