# هدف
واسط یکپارچهای را برای مجموعهای از واسطها در زیر سیستم، ارائه میدهد. این الگو واسط سطح-بالاتری را تعریف میکند که استفاده از زیرسیستم را سادهتر میکند.
الگوی طراحی Facade، اینترفیس را سادهتر میکند.
زمانی از این الگو استفاده کنید که
- نیاز به واسط سادهای دارید که دسترسی به سیستم پیچیده را فراهم کند.
- نیاز به کاهش کوپلینگ (اتصالها) بین پیادهسازیهای سیستم و کارخواهها دارید.
- نیاز به لایهبندی زیرسیستمها دارید.
- Facade
- Subsystem classes
تنها با دوستان بیواسطهٔ خود مذاکره کنید. این اصل یکی از روشهای ایجاد Loose Coupling است.
تنها متدهایی را صدا بزنید که متعلق به
- شیء خودتان باشد.
- آبجتهایی که توسط پارامتر به شیء شما منتقل شدهاند.
- هر شیءای که خودتان تولید یا نمونهسازی میکنید.
- کامپوننتهای خودتان (HAS-A)
هیچ کدام یک از راهنماهای بالا عنوان نمیکند که شما میتوانید متدهای یک شیء که توسط متدهای دیگر برگردانده میشود را صدا بزنید، مثلاً کد زیر خلاف این اصل است:
```Java
public float getTemp() {
return station.getThermometer().getTemperature();
}
```
یا مثلاً کد معروف جاوا:
```Java
System.out.println();
```
# مثالهای واقعی
- javax.faces.context.FacesContext, it internally uses among others the abstract/interface types LifeCycle, ViewHandler, NavigationHandler and many more without that the enduser has to worry about it (which are however overrideable by injection).
- javax.faces.context.ExternalContext, which internally uses ServletContext, HttpSession, HttpServletRequest, HttpServletResponse, etc.
# اطلاعات بیشتر