Pag - unawa sa Tatlong Katangian ng Paglalang

Ang mga disenyong software ay mga disenyong labanan-subok na plano para sa paglutas ng mga problemang reunitibong disenyo. Kabilang sa mga pinakamadalas gamitin ay ang mga disenyong panglikha na phystainyleton, Factory, at Prototypeiach na namamahala kung paano ang mga bagay ay instanti. Ang pagpili ng tama ay direktang nagreresulta sa code stabiling, pagganap, at pag-a-aklas ng pinalawak na giya ay nagbibigay ng mga batayang maalam na desisyon.

Halimbawa ng Isang Ingleton: Isang Paraan Upang Mamahala sa Lahat ng Ito

Tinitiyak ng disenyong Singleton na ang isang klase ay may eksaktong isang pagkakataon at nagbibigay ng isang global na access point dito.Ito ay isa sa pinakasimpleng mga padron, ngunit kadalasang maling ginagamit.Ang pinaka-pangunahing ideya ay supilin ang proseso ng konstante upang kahit ilang beses na ang klase ay hilingin, ang parehong bagay ay muling ibalik.

Kung Paano Gumagana ang Singleton

Karaniwan na, ang isang klase sa Singleton ay may pribadong buildingor at isang static method na nagbabalik ng pagkakataon.Ang unang tawag ay lumilikha ng bagay; ang kasunod na mga tawag ay ginagamit muli ang parehong pagkakataon. sa mga multi-threaded na kapaligiran, kinakailangan ang kompleksyon upang maiwasan ang mga kalagayan ng lahi na maaaring lumikha ng maraming mga pagkakataon.

public class DatabaseConnectionPool {
 private static DatabaseConnectionPool instance;
 private DatabaseConnectionPool() { /* initialization */ }
 public static synchronized DatabaseConnectionPool getInstance() {
 if (instance == null) {
 instance = new DatabaseConnectionPool();
 }
 return instance;
 }
}

Kapag Sumikat ang Singleton

  • Ang pag-aaruga ay nagbabahagi ng mga mapagkukunan: Ang isang pool na pang-ugnayan, isang serbisyong pagtotroso, o isang configuration manager ay nakikinabang mula sa isang punto ng koordinasyon.
  • Ang estadong Ultro: Kapag ang isang application-wide cache o regulator ay nangangailangan ng hindi nagbabagong access.
  • [Hardware o OS-level na mga mapagkukunan: Ang mga sistema ng talaksan, printer spoolers, o mga manedyer ng bintana ay karaniwang nagpapahintulot ng isa lamang pagkakataon.

Karaniwang mga Patibong na Dapat Iwasan

  • Overuse: Ang paggamit ng Singleton para sa lahat ng bagay ay humahantong sa mga nakatagong dependensiya at ginagawang mahirap ang unit test dahil hindi mo madaling mapalitan ang pagkakataon ng isang panunuya.
  • Thread-ligtas sa itaas: Ang klasikong paraang interconduct ay maaaring maging botttneck. Ang mga alternatibo tulad ng sabik na paunang pag-aalsa o double-checked locking (may madaling sumingaw) ay nakababawas ng pagtatalo.
  • [Talaksan: Dahil sa ang pandaigdigang access point ay hard-coded, ang mga kliyente ay nagiging mag-asawa sa kongkretong klaseng Singleton, na lumalabag sa Dependensiya Inversion Principle.

Sa kabila ng mga disbentahang ito, nananatiling kapaki-pakinabang ang Singleton kapag talagang kailangan mo ang isang nag-iisa at pandaigdigang bagay na maaaring marating. Para sa mas malalim na pagkaunawa, tingnan [Refactoring Guruimen Sington guide].

Huwaran sa Pabrika: Pag - aatas sa Tungkol sa Ayaw sa Paglalang

Ang disenyo ng Factory ay nagreresulta sa isang bagay na enstantiation logic, na nagpapahintulot sa mga subclasse na magpasiya kung aling klase ang instantia. Ito ay may dalawang pangunahing lasa: /Cascotory Method (isang paraan na nagpapanauli ng bagong mga bagay) at AQURE Factory (isang pamilya ng mga kaugnay na pamamaraan sa pabrika).

Detalyadong Pamamaraan ng Pabrika

Bigyan ng kahulugan ang isang interface para sa paglikha ng isang bagay, ngunit hayaang baguhin ng mga subclasse ang uri ng mga bagay na malilikha. halimbawa, ang isang dialog class ay maaaring magkaroon ng paraan . Subclasses tulad ng WindowsDialog at LinuxDialog na pag-aalsa sa paraang ito upang ibalik ang platform-specific na mga buton.

abstract class Dialog {
 abstract Button createButton();
 public void render() {
 Button okButton = createButton();
 okButton.onClick();
 }
}
class WindowsDialog extends Dialog {
 Button createButton() { return new WindowsButton(); }
}

Ang huwarang ito ay angkop kung:

  • Hindi maaasahan ng isang klase ang klase ng mga bagay na dapat nitong likhain.
  • Gusto mong gamitin sa isang lugar ang makatuwirang mga bagay sa paglalang.
  • Ang sistema ay kailangang maging independiyente sa kung paano ginagawa ang mga bagay nito.

Isang Mahalagang Pabrika: Nabubuo ng mga Pamilya ng Magkaugnay na mga Bagay

Ang A District Factory ay naglalaan ng isang interface para sa paglikha ng mga pamilya ng nauugnay o umaasap na mga bagay nang hindi tinitiyak ang kanilang mga klase ng kongkreto. Isipin ang isang GUI toolkit na dapat gumawa ng mga butones, mga kahon ng tseke, at mga balumbon na hindi nagbabago sa ilalim ng isang ibinigay na tema (e.g., Materyale, Cupertino).

Mas gusto ang parisang ito kapag:

  • Ang sistema ay dapat na isaayos na kasama ng isa sa maraming pamilya ng mga produkto.
  • Gusto mong ipatupad ang pagiging hindi pabagu - bago ng mga produkto.
  • Ang pagdaragdag ng bagong mga pamilya ng produkto ay nangangailangan ng kaunting pagbabago sa umiiral na kodigo.

Pag - unti ng Pabrika at Iba Pang mga Katangian

Ang pagawaan ay iyong go-to kapag ang bagay na nilalang ay masalimuot o kapag kailangan mong palitan ang mga pagpapatupad sa oras ng pagtakbo. ito ay mas nababaluktot kaysa sa Singleton dahil hindi nito nililimitahan ang bilang ng mga pagkakataon na iniiisa lamang ang paglikha. di-tulad ng Prototype, ang Factory ay lumilikha ng mga bagong pagkakataon mula sa mga score sa halip na gayahin ang mga umiiral.[TL][2 pahina[T][T][T][T][T][T][T][T][T][T][TCRERCERESCERSCERESCORCORCORCORCORESCORORORCORCORCORICT][T][T][T][T][T][T][T][T]

Huwaran sa Prototype: Clone sa Halip na Pag - aayos

Ang dibuhong Prototype ay lumilikha ng mga bagong bagay sa pamamagitan ng pagkopya ng isang umiiral na tertainite modelye. Lalo nang mahalaga kapag ang instantiation ay mahal (hal., mabigat na database queries, komplikadong kalkulasyon ng heometriya) o kapag ang confirm confirmment ay time-consumting. Sa halip na gumawa mula sa scrosing, nag-e - clone ka ng isang pre-configratedence at mahina ito ayon sa kinakailangan.

Pag - aayos ng Mekanika: Saw vs.

Karamihan sa mga wikang pamprograma ay nag-aalok ng isang itinayong paraang clone ( sa Java, sa Python, o kumalat sa JavaScript).[kailangan ng maingat na pansin] Kung ang kopya ay mababaw (partikular na tumutukoy sa mga bagay na maaaring gamitin) o malalim (lubusang independiyente).[kailangan ng sanggunian] Ang isang malalim na kopya ay nag-rererecopornificlease ng lahat ng mga bagay na tinutukoy ng clone. Kapag ang pag-proporsalkado ay dapat na ang mga sanggunian, ang iyong propety ay dapat na magpasyahinhinhin ang iyong kahintuntsa sa antas ng pag-gamit ng pag-gaya.

class MazePrototype {
 public MazePrototype clone() throws CloneNotSupportedException {
 return (MazePrototype) super.clone(); // shallow copy
 }
}

Tamang mga Tanawin Para sa Prototype

  • Costly object creation: Halimbawa, pagkarga ng isang malaking komplementasyon mula sa isang file o paglikha ng isang komplikadong heometriyang mesh.
  • [Dynamic runtime objects: Kapag ang sistema ay dapat lumikha ng mga bagong bagay na ang mga uri ay itinatakda sa oras (e.g., mga uri ng kaaway sa isang laro na nalilikha mula sa mga prefined template).
  • Mga pagsabog ng subclass: Sa halip na lumikha ng maraming subclass para sa bahagyang pagkakaiba, nag - clone ka ng isang modelo at nag - aayos ng ilang katangian.

Pagrerehistro at Pagsurot ng Prototype

Maaari mo pang kunin ang Prototype sa pamamagitan ng pagpapatupad ng isang registifela sentral store ng pre-build protocol na mga protektor na may key.[kailangan ng sanggunian] Ang mga Client ay humihiling ng isang prototype sa pamamagitan ng pag-aaproduksyon ay maaaring magsilbing magaang na alternatibo sa alinman sa Factory or Singleton sa ilang mga kaso. Para sa isang detalyadong paglalakad sa buong-ikot, tingnan Republishing Guruimens Protopy[T][T][T.

Side-by-Side Paghahambing: Singleton, Factory, Prototype

Upang matulungan kang pumili, itinatampok ng mesa sa ibaba ang mahahalagang pagkakaiba:

PatternInstance CountCreation MechanismBest For
SingletonExactly oneSelf-managed global accessShared resources, global state
FactoryMultiple instances (or families)Centralized creation logicDecoupling client from concrete classes, complex creation
PrototypeMultiple instances cloned from a templateCloning (shallow/deep copy)Expensive instantiation, runtime object generation

Kapag Nahigitan ng Huwaran ang Dati o Pinagsama

  • [[Pangleton + Factory: Ang isang pabrika ay maaari ring maging isang Singleton (e.g., isang abstraktong pabrika kada plataporma). Ito ay nagsasama ng global na access sa sentralisadong paglikha.
  • Protype + Factory: Ang isang prototy regulator ay maaaring gumanap bilang isang pabrikang idependyor sa halip na tawagin ang isang tagapagtayo. Ito ay lalo nang kapaki-pakinabang sa game development kapag nangingitlog ng mga entidad.
  • Protype + Singleton: Ang isang prototy object ay maaaring isang singleton sa diwa na isang premise na halimbawa lamang ang umiiral sa bawat uri, bagaman ang mga clone ay hindi iisangton.

May Epekto ang Praktikal na Pasiya

Kapag may problema ka sa disenyo na nangangailangan ng disenyo, itanong ang mga ito nang tama:

  1. Kailangan ko ba ng eksaktong isang pagkakataon sa buong aplikasyon?[ Kung oo, isaalang-alang ang Singleton. Ngunit tiyakin na ang isang pandaigdigang estadong pinagsasaluhan ay tunay na kailangan at ang testable wonift recit ay nagdurusa.
  2. Ang bagay ba ay masalimuot o malamang na magbago? Kung oo, gumamit ng Factory Method o A Diabetes Factory. Ito ay lalo nang nakatutulong kapag inaasam - asam mong magdagdag ng bagong mga uri ng bagay sa dakong huli.
  3. Ang paglikha ba ng bagay ay isang stake scneck, o kailangan ko ba ang maraming mga pagkakataon na bahagya lamang ang pagkakaiba? Kung oo, ang Prototype ay maaaring magtipid ng panahon at memorya sa pamamagitan ng pag-record ng isang template.
  4. Maari bang higit sa isang pattern ang nagsisilbi sa parehong layunin?[ Ang Evaluate trade-offs. Halimbawa, ang isang Flyweight pattern ay maaaring magbawas ng memorya sa halip na Prototype kung ang goal ay nagbabahagi ng immutable data.

Mga Real-World Halimbawa sa Inhinyeriya Software

Kadalasang pinaghahalo ng mga aplikasyong pang-inhinyeriya ang mga dibuhong ito. maaaring gamitin ng isang sistemang CAD ang Singleton para sa user o pilipinong manedyer, Factory upang lumikha ng iba't ibang hugis heometriko (circle, polygon, spline), at Prototype para sa pagde - clone ng isang masalimuot na kapulungan at pagkatapos ay baguhin ito. Maaaring gamitin ng makinang pang - engine - engine ang Factory upang lumikha ng iba't ibang mga bagay na panlutas, Prototype para sa pagkopya ng mga pagbabago ng particle system, at sing sing sington para sa isang serbisyo sa pagtotroso na nagrerekord.

Konklusyon: Hayaang Maimpluwensiyahan ng Disenyo ang Disenyo Mo

Ang Singleton, Factory, at Prototype ay mga pundasyong disenyong panglikha, ngunit ang mga ito ay hindi mga balag na pilak.Ang pinakamahusay na pagpili ay lumalabas mula sa pag-unawa ng iyong system ⁇ b ⁇ ts: ang pangangailangan para sa halimbawang kontrol, ang kasalimuutan ng paglikha ng bagay, at ang halaga ng mga bagong pagkakataon. laging mas gusto ang kalinawan at ang pagiging marhinyero kaysa sa pattern profits. Kapag may pagdududa, simulan sa Factory ⁇ it ay nag-aalok ng pinakamalinis na pag-coupling at sa kalaunan ay maaaring palitan o dagdagan ng Protype o sing singleton kung ang mga sitwasyon.

Sa pamamagitan ng pagpapakadalubhasa sa tatlong huwarang ito, nasasangkapan mo ang iyong sarili ng isang kapaki - pakinabang na kagamitan sa paggawa ng matibay, nababaluktot na mga software sa inhinyeriya. Wikipedia na artikulo tungkol sa disenyo ng software at ang [[Refactoring Guru bystanding of archsments.