תבנית עיצוב הממשק היא אחת מבין תבניות העיצוב המבניות (כמו תבנית מתאים ו־תבנית מעטפת). תבנית עיצוב הממשק משמשת לעזור ליישומי לקוח להתממשק בקלות עם המערכת.
תבנית עיצוב הממשק
על פי המתכנתים הארבעה (GoF) תבנית עיצוב הממשק היא:
לספק ממשק מאוחד לקבוצת ממשקים בתת־מערכת. תבנית עיצוב הממשק מגדירה ממשק ברמה גבוהה שהופך את התת־מערכת לקלה יותר לשימוש.
כנראה יש לנו יישום עם סט של ממשקים לשימוש במסדי נתונים MySQL/Oracle וליצירת דוחות שונים, כמו דוח HTML ו-PDF. לכן, יהיה לנו סט שונה של ממשקים לעבוד עם סוגים שונים של מסדי נתונים. כעת, יישום לקוח יכול להשתמש בממשקים אלו כדי לקבל את החיבור למסד הנתונים הנדרש וליצור דוחות. אך כאשר המורכבות עולה או ששמות ההתנהגות של הממשק קשות להבנה, יישום הלקוח ימצא קשה לנהל את זה. לכן, נוכל ליישם כאן את תבנית העיצוב Facade ולספק ממשק עטיפה מעל לממשק הקיים לעזור ליישום הלקוח.
תבנית עיצוב Facade – סט של ממשקים
נוכל להשתמש בשני ממשקים עוזרים, בשמות MySqlHelper
ו-OracleHelper
.
package com.journaldev.design.facade;
import java.sql.Connection;
public class MySqlHelper {
public static Connection getMySqlDBConnection(){
//קבל חיבור למסד נתונים של MySql באמצעות פרמטרי חיבור
return null;
}
public void generateMySqlPDFReport(String tableName, Connection con){
//קבל נתונים מטבלה וצור דוח PDF
}
public void generateMySqlHTMLReport(String tableName, Connection con){
//קבל נתונים מטבלה וצור דוח PDF
}
}
package com.journaldev.design.facade;
import java.sql.Connection;
public class OracleHelper {
public static Connection getOracleDBConnection(){
//קבל חיבור למסד נתונים של Oracle באמצעות פרמטרי חיבור
return null;
}
public void generateOraclePDFReport(String tableName, Connection con){
//קבל נתונים מטבלה וצור דוח PDF
}
public void generateOracleHTMLReport(String tableName, Connection con){
//קבל נתונים מטבלה וצור דוח PDF
}
}
ממשק תבנית העיצוב של הפסד
ניתן ליצור ממשק של תבנית העיצוב של הפסד כמו שמוצג למטה. שימו לב לשימוש ב-Enum של 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";
//יצירת דוח HTML של MySql ודוח PDF של Oracle בלעדי שימוש בממשק הפסד
Connection con = MySqlHelper.getMySqlDBConnection();
MySqlHelper mySqlHelper = new MySqlHelper();
mySqlHelper.generateMySqlHTMLReport(tableName, con);
Connection con1 = OracleHelper.getOracleDBConnection();
OracleHelper oracleHelper = new OracleHelper();
oracleHelper.generateOraclePDFReport(tableName, con1);
//יצירת דוח HTML של MySql ודוח PDF של Oracle באמצעות ממשק הפסד
HelperFacade.generateReport(HelperFacade.DBTypes.MYSQL, HelperFacade.ReportTypes.HTML, tableName);
HelperFacade.generateReport(HelperFacade.DBTypes.ORACLE, HelperFacade.ReportTypes.PDF, tableName);
}
}
כפי שניתן לראות, שימוש בממשק של תבנית העיצוב של הפסד הוא דרך הרבה יותר קלה ונקיה למניעת הכנסת הרבה לוגיקה בצד הלקוח. מחלקת JDBC Driver Manager לקבלת חיבור למסד נתונים היא דוגמה נהדרת לתבנית העיצוב של הפסד.
נקודות חשובות של תבנית העיצוב של הפסד
- גרסת הפסד היא יותר כמו עוזר עבור יישומי הלקוח, היא לא מסתירה את ממשקי המערכת המשנה מהלקוח. האם להשתמש בפסד או לא תלוי כולית בקוד הלקוח.
- גרסת הפסד יכולה להיות מיושמת בכל נקודת פיתוח, בדרך כלל כאשר מספר ממשקים מתרבים והמערכת מתרכזת.
- ממשקי המערכת המשנה אינם מודעים לפסד ואין להם שום התייחסות לממשק הפסד.
- גרסת הפסד צריכה להיות מיושמת עבור ממשקים דומים, המטרה שלה היא לספק ממשק יחיד במקום ממשקים מרובים העושים את אותה עבודה.
- ניתן להשתמש בתבנית התפאורה עם תבנית מפעל כדי לספק ממשק טוב יותר למערכות הלקוח.
זהו הכל עבור גרסת הפסד, נשארו מחוברים למאמרים נוספים על תבניות עיצוב. 🙂
Source:
https://www.digitalocean.com/community/tutorials/facade-design-pattern-in-java