Sobes.tech
Middle

Have you used the Facade pattern in your projects?

sobes.tech AI

Answer from AI

Yes, I have used it. Facade provides a simple and unified interface to a complex subsystem.

Example of usage:

Creating a unified interface for working with different data sources (e.g., local database, network API).

// Interface for data operations
interface IDataService {
    fun getData(): String
}

// Implementation for local database
class LocalDatabaseService : IDataService {
    override fun getData(): String {
        // Logic for fetching data from local database
        return "Data from local database"
    }
}

// Implementation for network API
class NetworkApiService : IDataService {
    override fun getData(): String {
        // Logic for fetching data from network API
        return "Data from network API"
    }
}

// Facade providing a unified interface
class DataFacade {
    private val localService = LocalDatabaseService()
    private val networkService = NetworkApiService()

    fun fetchData(): String {
        // Example logic for choosing data source
        return if (/* condition for choosing source */ true) {
            localService.getData()
        } else {
            networkService.getData()
        }
    }
}

Using Facade simplifies client interaction with multiple subsystem classes, hiding its complexity. This enhances usability and reduces client dependency on specific implementations within the subsystem.