Рубрики
Без рубрики

Шаблон дизайна фасада на Java

Шаблон дизайна фасада на Java. Пример Рисунка Фасада. Пример кода шаблона фасада Java. Интерфейс фасада, клиентская программа с рисунком фасада, важные моменты.

Автор оригинала: Pankaj Kumar.

Шаблон дизайна фасада является одним из Шаблонов структурного дизайна (таких как Шаблон адаптера и Шаблон декоратора ). Шаблон дизайна фасада используется для облегчения взаимодействия клиентских приложений с системой.

Шаблон Дизайна Фасада

В соответствии с рисунком дизайна фасада GoF:

Обеспечьте единый интерфейс для набора интерфейсов в подсистеме. Шаблон фасада определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Предположим, у нас есть приложение с набором интерфейсов для использования базы данных MySQL/Oracle и создания различных типов отчетов, таких как отчет HTML, отчет PDF и т.д.

Таким образом, у нас будет разный набор интерфейсов для работы с различными типами баз данных. Теперь клиентское приложение может использовать эти интерфейсы для получения необходимого подключения к базе данных и создания отчетов.

Но когда сложность возрастает или имена поведения интерфейса сбивают с толку, клиентскому приложению будет трудно управлять им.

Таким образом, мы можем применить здесь шаблон дизайна фасада и предоставить интерфейс оболочки поверх существующего интерфейса, чтобы помочь клиентскому приложению.

Шаблон дизайна фасада – Набор интерфейсов

У нас может быть два вспомогательных интерфейса, а именно MySqlHelper и OracleHelper .

package com.journaldev.design.facade;

import java.sql.Connection;

public class MySqlHelper {
	
	public static Connection getMySqlDBConnection(){
		//get MySql DB connection using connection parameters
		return null;
	}
	
	public void generateMySqlPDFReport(String tableName, Connection con){
		//get data from table and generate pdf report
	}
	
	public void generateMySqlHTMLReport(String tableName, Connection con){
		//get data from table and generate pdf report
	}
}
package com.journaldev.design.facade;

import java.sql.Connection;

public class OracleHelper {

	public static Connection getOracleDBConnection(){
		//get Oracle DB connection using connection parameters
		return null;
	}
	
	public void generateOraclePDFReport(String tableName, Connection con){
		//get data from table and generate pdf report
	}
	
	public void generateOracleHTMLReport(String tableName, Connection con){
		//get data from table and generate pdf report
	}
	
}

Интерфейс Шаблона Дизайна Фасада

Мы можем создать интерфейс шаблона фасада, как показано ниже. Обратите внимание на использование перечисления Java для обеспечения безопасности типов.

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;
	}
}

Клиентская программа по Дизайну фасада

Теперь давайте посмотрим клиентский код без использования шаблона фасада и с использованием интерфейса шаблона фасада.

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";
		
		//generating MySql HTML report and Oracle PDF report without using 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);
		
		//generating MySql HTML report and Oracle PDF report using Facade
		HelperFacade.generateReport(HelperFacade.DBTypes.MYSQL, HelperFacade.ReportTypes.HTML, tableName);
		HelperFacade.generateReport(HelperFacade.DBTypes.ORACLE, HelperFacade.ReportTypes.PDF, tableName);
	}

}

Как вы можете видеть, использование интерфейса шаблона фасада – намного более простой и чистый способ избежать большого количества логики на стороне клиента. Класс диспетчера драйверов ODBC для подключения к базе данных является прекрасным примером шаблона проектирования фасада.

Важные Моменты Дизайна Фасада

  • Шаблон дизайна фасада больше похож на помощник для клиентских приложений, он не скрывает интерфейсы подсистем от клиента. Использование фасада или нет полностью зависит от клиентского кода.
  • Шаблон дизайна фасада может быть применен на любом этапе разработки, обычно, когда количество интерфейсов растет и система усложняется.
  • Интерфейсы подсистем не знают о фасаде и не должны иметь никаких ссылок на интерфейс фасада.
  • Шаблон дизайна фасада следует применять для аналогичных интерфейсов, его цель состоит в том, чтобы обеспечить единый интерфейс, а не несколько интерфейсов, которые выполняют аналогичные задачи.
  • Мы можем использовать Заводской шаблон с фасадом, чтобы обеспечить лучший интерфейс для клиентских систем.

Это все для шаблона дизайна фасада, следите за обновлениями для получения дополнительных статей о шаблонах дизайна. 🙂