સ્ટ્રક્ચરલ ડિઝાઇન પેટર્ન્સ: Facade, Flyweight, અને Proxy

સ્ટ્રક્ચરલ ડિઝાઇન પેટર્ન્સ તમને ક્લાસ અને ઓબ્જેક્ટ્સને વ્યવસ્થિત કરવામાં મદદ કરે છે.

આજે, અમે તમારા ટૂલકિટને પૂર્ણ કરવા માટે છેલ્લા ત્રણ પેટર્ન્સ વિશે જાણીશું.

૧. Facade પેટર્ન Facade જટિલ સિસ્ટમ્સને સરળ બનાવે છે. તે અસ્તવ્યસ્ત ક્લાસના જૂથ માટે એક સરળ ઇન્ટરફેસ પૂરો પાડે છે.

એક મૂવી થિયેટર વિશે વિચારો. મૂવી જોવા માટે, તમારે લાઈટો ધીમી કરવી પડે, પ્રોજેક્ટર ચાલુ કરવું પડે અને પડદા ખોલવા પડે. પાંચ અલગ-અલગ સિસ્ટમ્સને કોલ કરવાને બદલે, તમે ફક્ત એક જ મેથડ કોલ કરો છો: theater.watch_movie().

તેનો ઉપયોગ ત્યારે કરો જ્યારે:

  • તમે જટિલ સબસિસ્ટમને સરળ બનાવવા માંગતા હોવ.
  • તમને મોટા API માટે સિંગલ એન્ટ્રી પોઈન્ટની જરૂર હોય.
  • તમે ક્લાયન્ટ્સને ઇન્ટરનલ લોજિકથી અલગ (decouple) કરવા માંગતા હોવ.

૨. Flyweight પેટર્ન Flyweight મેમરી બચાવે છે. જ્યારે તમારી પાસે હજારો સમાન ઓબ્જેક્ટ્સ હોય ત્યારે તે કામ લાગે છે.

દરેક ઓબ્જેક્ટમાં દરેક વિગત સ્ટોર કરવાને બદલે, તમે ડેટાને વિભાજિત કરો છો. તમે શેર કરેલો, અપરિવર્તિત ડેટા (intrinsic state) એક જગ્યાએ રાખો છો. તમે યુનિક ડેટા (extrinsic state) ને અલગ રાખો છો.

તેનો ઉપયોગ ત્યારે કરો જ્યારે:

  • મેમરીનો વપરાશ એક વાસ્તવિક સમસ્યા હોય.
  • તમે લાખો સમાન ઓબ્જેક્ટ્સ મેનેજ કરતા હોવ, જેમ કે ટેક્સ્ટ એડિટરમાં કેરેક્ટર્સ અથવા ગેમમાં પાર્ટિકલ્સ.
  • તમે પર્ફોર્મન્સ સુધારવા માટે ઓબ્જેક્ટ પૂલિંગનો ઉપયોગ કરવા માંગતા હોવ.

૩. Proxy પેટર્ન Proxy બીજા ઓબ્જેક્ટના સ્ટેન્ડ-ઇન (stand-in) તરીકે કામ કરે છે. તે એક્સેસને નિયંત્રિત કરવા માટે ક્લાયન્ટ અને અસલી ઓબ્જેક્ટ વચ્ચે રહે છે.

એક Proxy કરી શકે છે:

  • Lazy load: જ્યારે યુઝર તેના પર ક્લિક કરે ત્યારે જ ભારે ઈમેજીસ લોડ કરવી.
  • એક્સેસ કંટ્રોલ: યુઝર પાસે ડેટાબેઝ ડિલીટ કરવાની પરમિશન છે કે નહીં તે તપાસવું.
  • એક્ટિવિટી લોગ કરવી: કોણ ચોક્કસ સર્વિસનો ઉપયોગ કરે છે તેનો ટ્રેક રાખવો.
  • રિઝલ્ટ કેશ કરવા: ખર્ચાળ લોજિક ચલાવવાને બદલે સેવ કરેલો ડેટા રિટર્ન કરવો.

તેનો ઉપયોગ ત્યારે કરો જ્યારે:

  • તમારે ખર્ચાળ કામગીરીમાં વિલંબ કરવાની જરૂર હોય.
  • તમારે સેન્સિટિવ સર્વિસનું રક્ષણ કરવું હોય.
  • તમે ઓરિજિનલ ક્લાસમાં ફેરફાર કર્યા વિના લોગિંગ અથવા સુરક્ષા ઉમેરવા માંગતા હોવ.

સારાંશ કોષ્ટક (Summary Table)

Adapter: અસંગત સિસ્ટમ્સને સાથે કામ કરવા માટે બનાવે છે. • Bridge: એબ્સ્ટ્રેક્શનને ઇમ્પ્લીમેન્ટેશનથી અલગ કરે છે. • Composite: ટ્રી સ્ટ્રક્ચર્સ બનાવે છે. • Decorator: ક્લાસમાં ફેરફાર કર્યા વિના બિહેવિયર ઉમેરે છે. • Facade: જટિલ સબસિસ્ટમ્સને સરળ બનાવે છે. • Flyweight: મેમરી બચાવવા માટે ડેટા શેર કરે છે. • Proxy: ઓબ્જેક્ટ્સના એક્સેસને નિયંત્રિત કરે છે.

ગોલ્ડન રૂલ: કોડને મેન્ટેનેબલ (maintainable) બનાવવા માટે આ પેટર્ન્સનો ઉપયોગ કરો. માત્ર દેખાડો કરવા માટે તેનો ઉપયોગ કરશો નહીં.

હવે, આપણે Behavioral Design Patterns શ્રેણી શરૂ કરીશું.

Source: https://dev.to/mahdi0shamlou/mahdi-shamlou-structural-design-patterns-2026-facade-flyweight-proxy-production-examples-g5l