Home Java javaTutorial Make your application loosely coupled-Abstraction-PolyMorphism

Make your application loosely coupled-Abstraction-PolyMorphism

Jul 16, 2024 pm 04:07 PM

Make your application loosely coupled-Abstraction-PolyMorphism

While developing an application it's mandatory to keep components independent from each other, this is what loose coupling is. It provides standardization, consolidation, normalization, and governance over your application. A loosely coupled application is easy to scale up.

In this article: You will learn with an example, how to make your application loosely coupled and get the maximum out of it.

Need of Loose Coupling:

Let's say you are fetching something from your UserDatabase database, here is the data-layer defined function to fetch database records:

public class UserDatabase {
    public String getUserDetails(){
        return "User Deatils ";
    }
}

Copy after login

In our service layer, let's create a function to talk to our data layer in order to fetch records:

public class UserDatabase {
    public String getUserDetails(){
        return "User Details in DB1";
    }
}

Copy after login

In our application layer or main function we will talk to our service layer:

public static void main(String[] args) {
        //Tight Coupling
        UserManager userManager = new UserManager();
        System.out.println(userManager.getUserInfo());
    }

Copy after login

In this application, when we try to scale up our application, tight coupling will make it redundant and hard to expand.
That's why a loosely coupled application is so important, In spring boot we achieve it using interfaces. Let's make the above app loosely coupled.

Loose Coupling:

Let's define an interface that will give us an overall structure for the data layer:

public interface UserDataProvider {
    String getUserDetails();
}

Copy after login

Now fetch database records while implementing this interface:

public class UserDatabase implements UserDataProvider{
    @Override
    public String getUserDetails(){
        return "User Details in DB1";
    }
}

Copy after login

Now define the service layer to communicate with the data layer:

public class UserManager {
    private UserDataProvider userDataProviderr;
    public UserManager(UserDataProvider userDataProvider) {
        this.userDataProviderr = userDataProvider;
    }

    public String getUserInfo(){
        return userDataProviderr.getUserDetails();
    }
}
Copy after login

Here while injecting a UserDataProvider reference object into UserManager we will be able to access the UserDatabase function which implements that interface so it will provide us abstraction at the level of the data layer.

Now we can access records through UserManager :

    UserDataProvider userDataProvider = new UserDatabase();
        UserManager userManager = new UserManager(userDataProvider);
        System.out.println(userManager.getUserInfo());

Copy after login

We can easily scale up our application and integrate as many database connections as we want like if we need to configure another database for example WebServerDatabase, we only need to create its instance assigned to the implemented interface, and then through UserManager we can access that too. Using an interface provides us Abstraction, loose coupling, and PolyMorphism(implementing the same interface by different classes provides us polymorphism).

Happy Coding :)

The above is the detailed content of Make your application loosely coupled-Abstraction-PolyMorphism. 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
1664
14
PHP Tutorial
1268
29
C# Tutorial
1246
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 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 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 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