Virtual Constructor
-
وابستگی به زیرکلاس را برای ساخت اشیاء از بین میبرد.
-
برای زیرکلاسها hook ارائه میکند.
-
Connects parallel class hierarchies.
-
در الگوی طراحی Factory Method از Simple Factory استفاده میکنیم.
-
در Simple Factory تنها یک کارخانه داریم. اما اگر چند کارخانه داشته باشیم که همگی این کارخانهها محصولات مشابهی تولید کنند مثلاً همگی موبایل تولید میکنند (اما هر کارخانه پیادهسازی خودش را دارد) در چنین حالتی از Factory Method استفاده میکنیم. به این صورت یک رابط برای کارخانهها ایجاد میکنیم و پیادهسازی متود ساخت محصول را به کارخانهها واگذار میکنیم. هر یک از کارخانهها از Simple Factory برای تولید محصولاتش استفاده میکند.
-
به روش بالا می گوییم: Allowing the subclasses to decide یا Real-time decision
-
برای اینکه پارامترهای Concrete Factory بتوانند
Type-Safe
باشند، میتوانیم ازenum
استفاده کنیم و یا روشهای بهتر. -
وقتی که نمونهسازی اشیاء را در یک آبجکت یا متد، کپسوله کنیم، باعث بالا رفتن maintenance میشود و باعث میشود از کدهای اضافی و مجدد خودداری شود.
-
در این الگو اصل Dependency Inversion Principle رعایت میشود.
ساخت موبایل از دو کارخانهٔ متفاوت
یک واسط برای تمامی موبایلها تعریف میکنیم و ویژگیها و رفتارهای مشترک را ذکر میکنیم.
- نام موبایل
- رنگ
واسط موبایل را برای موبایلهای مختلف پیادهسازی میکنیم.
- Nokia N900
- Nokia N95
- Motorola Atrix
- Motorola A1200
واسط کارخانه createMobile()
هر کدام از کارخانهها باید واسط کارخانه را پیادهسازی کنند.
- NokiaFactory
- MotorolaFactory
- ...
- java.util.Calendar#getInstance()
- java.util.ResourceBundle#getBundle()
- java.text.NumberFormat#getInstance()
- java.nio.charset.Charset#forName()
- java.net.URLStreamHandlerFactory#createURLStreamHandler(String) (Returns singleton object per protocol)