Part 4 | Facade Pattern شرح

ثالث باترن معانا فى السلسلة بتاعه ال 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

Design Patterns Part 1

Singleton Pattern Part 2

Factory Method Pattern Part 3

Channel Youtube


Comments