Patron de conception de façade en Java

xml
Modèle de conception de façade est l’un des modèles de conception structurelle (comme le modèle d’adaptateur et le modèle de décorateur). Le modèle de conception de façade est utilisé pour aider les applications clientes à interagir facilement avec le système.

Modèle de conception de façade

Selon GoF, le modèle de conception de façade est :

Fournir une interface unifiée à un ensemble d’interfaces dans un sous-système. Le modèle de conception de façade définit une interface de plus haut niveau qui rend le sous-système plus facile à utiliser.

Supposons que nous ayons une application avec un ensemble d’interfaces pour utiliser la base de données MySql/Oracle et pour générer différents types de rapports, tels que des rapports HTML, des rapports PDF, etc. Nous aurons donc différents ensembles d’interfaces pour travailler avec différents types de bases de données. Maintenant, une application cliente peut utiliser ces interfaces pour obtenir la connexion de base de données requise et générer des rapports. Mais lorsque la complexité augmente ou que les noms des comportements d’interface sont confus, l’application cliente trouvera difficile à gérer. Nous pouvons donc appliquer le motif de conception Facade ici et fournir une interface enveloppante au-dessus de l’interface existante pour aider l’application cliente.

Motif de conception Facade – Ensemble d’interfaces

Nous pouvons avoir deux interfaces auxiliaires, à savoir MySqlHelper et OracleHelper.

package com.journaldev.design.facade;

import java.sql.Connection;

public class MySqlHelper {
	
	public static Connection getMySqlDBConnection(){
		//obtenir une connexion DB MySql en utilisant les paramètres de connexion
		return null;
	}
	
	public void generateMySqlPDFReport(String tableName, Connection con){
		//obtenir des données de la table et générer un rapport PDF
	}
	
	public void generateMySqlHTMLReport(String tableName, Connection con){
		//obtenir des données de la table et générer un rapport PDF
	}
}
package com.journaldev.design.facade;

import java.sql.Connection;

public class OracleHelper {

	public static Connection getOracleDBConnection(){
		//obtenir une connexion DB Oracle en utilisant les paramètres de connexion
		return null;
	}
	
	public void generateOraclePDFReport(String tableName, Connection con){
		//obtenir des données de la table et générer un rapport PDF
	}
	
	public void generateOracleHTMLReport(String tableName, Connection con){
		//obtenir des données de la table et générer un rapport PDF
	}
	
}

Interface du Patron de Conception de Facade

Nous pouvons créer une interface de patron de conception de facade comme ci-dessous. Remarquez l’utilisation de Java Enum pour la sécurité des types.

package com.journaldev.design.facade;

import java.sql.Connection;

public class HelperFacade {

	public static void generateReport(DBTypes dbType, ReportTypes reportType, String tableName){
		Connection con = null;
		switch (dbType){
		case MYSQL: 
			con = MySqlHelper.getMySqlDBConnection();
			MySqlHelper mySqlHelper = new MySqlHelper();
			switch(reportType){
			case HTML:
				mySqlHelper.generateMySqlHTMLReport(tableName, con);
				break;
			case PDF:
				mySqlHelper.generateMySqlPDFReport(tableName, con);
				break;
			}
			break;
		case ORACLE: 
			con = OracleHelper.getOracleDBConnection();
			OracleHelper oracleHelper = new OracleHelper();
			switch(reportType){
			case HTML:
				oracleHelper.generateOracleHTMLReport(tableName, con);
				break;
			case PDF:
				oracleHelper.generateOraclePDFReport(tableName, con);
				break;
			}
			break;
		}
		
	}
	
	public static enum DBTypes{
		MYSQL,ORACLE;
	}
	
	public static enum ReportTypes{
		HTML,PDF;
	}
}

Programme Client du Patron de Conception de Facade

Maintenant, voyons le code client sans utiliser le patron de conception de facade et en utilisant l’interface de patron de conception de facade.

package com.journaldev.design.test;

import java.sql.Connection;

import com.journaldev.design.facade.HelperFacade;
import com.journaldev.design.facade.MySqlHelper;
import com.journaldev.design.facade.OracleHelper;

public class FacadePatternTest {

	public static void main(String[] args) {
		String tableName="Employee";
		
		//génération d'un rapport HTML MySql et d'un rapport PDF Oracle sans utiliser Facade
		Connection con = MySqlHelper.getMySqlDBConnection();
		MySqlHelper mySqlHelper = new MySqlHelper();
		mySqlHelper.generateMySqlHTMLReport(tableName, con);
		
		Connection con1 = OracleHelper.getOracleDBConnection();
		OracleHelper oracleHelper = new OracleHelper();
		oracleHelper.generateOraclePDFReport(tableName, con1);
		
		//génération d'un rapport HTML MySql et d'un rapport PDF Oracle en utilisant Facade
		HelperFacade.generateReport(HelperFacade.DBTypes.MYSQL, HelperFacade.ReportTypes.HTML, tableName);
		HelperFacade.generateReport(HelperFacade.DBTypes.ORACLE, HelperFacade.ReportTypes.PDF, tableName);
	}

}

Comme vous pouvez le voir, l’utilisation de l’interface du patron de conception de facade est une manière beaucoup plus facile et plus propre d’éviter d’avoir beaucoup de logique côté client. La classe JDBC Driver Manager pour obtenir la connexion à la base de données est un exemple remarquable du patron de conception de facade.

Points Importants du Patron de Conception de Facade

  • Le modèle de conception de façade ressemble davantage à un assistant pour les applications clientes, il ne cache pas les interfaces du sous-système au client. Utiliser ou non la façade dépend entièrement du code client.
  • Le modèle de conception de façade peut être appliqué à n’importe quel moment du développement, généralement lorsque le nombre d’interfaces augmente et que le système devient complexe.
  • Les interfaces du sous-système ne sont pas conscientes de la façade et ne doivent avoir aucune référence à l’interface de la façade.
  • Le modèle de conception de façade devrait être appliqué pour des interfaces similaires, dans le but de fournir une seule interface plutôt que plusieurs interfaces qui font des travaux similaires.
  • Nous pouvons utiliser le patron de conception de fabrique avec la façade pour fournir une meilleure interface aux systèmes clients.

C’est tout pour le modèle de conception de façade, restez à l’écoute pour plus d’articles sur les modèles de conception. 🙂

Source:
https://www.digitalocean.com/community/tutorials/facade-design-pattern-in-java