ثالث باترن معانا فى السلسلة بتاعه ال design patterns هى ال Facade Pattern .
دردشة
فى الاول بس عايز اقولك ان ال Facade Pattern
يتبعوا نوع ال Structural Design Patterns واحنا كنا قولنا قبل كدا ان كل الباترن اللى فى النوع دا مهمتها ايه ؟؟
يحدد العلاقات بين الاوبجيكت والكلاسات بتكون ازاى علشان اقدر افهم بناء هيكل الابليكشن الكبير بسهوله مثلا
how subclasses and classes interact through inheritance
مثال حياتى
تخيل أنك دخلت مول وعايز تشترى موبيل وحاجه تشربها وملابس فتروح لمكان تجيب منه الموبيل وبعدين تحاسبه ومكان تانى تجيب منه حاجه تشربها وتحاسبه وبعدين تلف تجيب الملابس اللى محتاجها وتحاسب .
روحت أنا قايلك أيه رأيك نعمل ليك خدمه فى بدايه المول عباره عن واجهه كدا منها تختار الحاجه اللى محتاجها من المكان اللى حابه وتحاسب كل دا وانت فى نفس المكان وفرت عليك صح متنكرش 😅.
--------------------------------------------------------------------------------------------------------------
مثال واقعى ك Developer
لو أنت بتكتب كود هيرفع لليوز بوستات فأنت مثلا هتستخدم مكتبه تخلى الصوره فى شكل دايره مثلا ومكتبه تانيه تضغط الصوره قبل ما تترفع او هتستخدم طريقه دفع معينه فى الابليكشن بتاعك يعنى من الاخر عندك شويه library and framework بتكون محتاج تتعامل معاها.
فهتكون وقتها محتاج تهندل كل الكلام دا وتضيف ال dependencies وتشغل الميثود اللى محتاج تستخدمها بطريقه صح .
الكلام دا هيخلى ال business logic بتاعك فى علاقه معقده مع الكلاسات الخاارجيه اللى هى بنسبالك ال third party library .
--------------------------------------------------------------------------------------------------------------------------------------
التعريف
اذا فهمنا ان ال Facade Pattern مهتم بتوفير كل الخدمات اللى محتاجه ال Client فى مكان واحد يسمى الواجهه ويتعامل معه ال Client.
معلومه صغيره كلمه Facade فرنسيه تعنى (واجهه مبنى)
-----------------------------------------------------------------------------------------------------------------------------
المشكله
تعالى بقا نشوف مشكله ونشوف هنحلها ازى
عندى شركه موبيلات فيها 3 انواع من الموبيلات Iphone - Samsung - Blackberry
1- ابنى ال product عندى اللى عباره عن interface
هعمل interface اسمه MobileShop
public interface MobileShop { public void modelNo(); public void price(); }
2- هبدا انفذ ال sub-system بتوع ال product
كل نوع من انواع الموبايل بنسميه sub-system فانا هنا عندى 3 هبدأ اكريت 3 كلاس لكل نوع موبايل وبيورث من الانترفيس بتاعى MobileShop
public class Iphone implements MobileShop { @Override public void modelNo() { System.out.println(" Iphone 6 "); } @Override public void price() { System.out.println(" Rs 65000.00 "); } }
public class Samsung implements MobileShop { @Override public void modelNo() { System.out.println(" Samsung galaxy tab 3 "); } @Override public void price() { System.out.println(" Rs 45000.00 "); } }
public class Blackberry implements MobileShop { @Override public void modelNo() { System.out.println(" Blackberry Z10 "); } @Override public void price() { System.out.println(" Rs 55000.00 "); } }
3- هبدا انفذ فكرة ال facade pattern
هنشئ كلاس هيكون بنسبالى هو الواجهه اللى جواه كل الخدمات بتاعتى
public class ShopKeeper { private MobileShop iphone; private MobileShop samsung; private MobileShop blackberry; public ShopKeeper(){ iphone= new Iphone(); samsung=new Samsung(); blackberry=new Blackberry(); } public void iphoneSale(){ iphone.modelNo(); iphone.price(); } public void samsungSale(){ samsung.modelNo(); samsung.price(); } public void blackberrySale(){ blackberry.modelNo(); blackberry.price(); } }
4-يبدا ال Client ينادى على الخدمه اللى هو عايزها
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class FacadePatternClient { private static int choice; public static void main(String args[]) throws NumberFormatException, IOException{ do{ System.out.print("========= Mobile Shop ============ \n"); System.out.print(" 1. IPHONE. \n"); System.out.print(" 2. SAMSUNG. \n"); System.out.print(" 3. BLACKBERRY. \n"); System.out.print(" 4. Exit. \n"); System.out.print("Enter your choice: "); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); choice=Integer.parseInt(br.readLine()); ShopKeeper sk=new ShopKeeper(); switch (choice) { case 1: { sk.iphoneSale(); } break; case 2: { sk.samsungSale(); } break; case 3: { sk.blackberrySale(); } break; default: { System.out.println("Nothing You purchased"); } return; } }while(choice!=4); } }
Output
========= Mobile Shop ============ 1. IPHONE. 2. SAMSUNG. 3. BLACKBERRY. 4. Exit. Enter your choice: 1 Iphone 6 Rs 65000.00 ========= Mobile Shop ============ 1. IPHONE. 2. SAMSUNG. 3. BLACKBERRY. 4. Exit. Enter your choice: 2 Samsung galaxy tab 3 Rs 45000.00 ========= Mobile Shop ============ 1. IPHONE. 2. SAMSUNG. 3. BLACKBERRY. 4. Exit. Enter your choice: 3 Blackberry Z10 Rs 55000.00 ========= Mobile Shop ============ 1. IPHONE. 2. SAMSUNG. 3. BLACKBERRY. 4. Exit. Enter your choice: 4 Nothing You purchased
مميزات الباترن
1- بيبعد ال clients عن تعقيدات مكونات ال sub-systems
2- بيقلل تعامل ال clients مع ال sub-systems
-----------------------------------------------------------------------------------------------------------------------------
ملخص الباترن
بجمع كل ال sub-system فى system واحد يسمى الواجهه لكى يتعامل ال client مع الواجهه بدل من ال sub-system.
-----------------------------------------------------------------------------------------------------------------------------
الى اللقاء
بس كدا انا خلصت عندكوا اى تعليقات او اضافه ياريت تعرفونا ومتنساش تعمل لايك وشير وصبصكرايب معلش اندمجت شويه😍😍
يلا سلاااااام.
#Part4
#Design_patterns
#Interview_Question
#Next_Step
Comments
Post a Comment