Ano ang pattern ng tulay?
Ang pattern ng tulay ay isang pattern ng disenyo ng istruktura. Sa madaling salita, ang pangunahing trabaho nito ay lumikha ng isang ganap na istraktura mula sa mga klase at bagay. Ginagawa ito ng tulay sa pamamagitan ng paghahati ng isa o higit pang mga klase sa magkakahiwalay na hierarchy: abstraction at pagpapatupad . Ang pagbabago sa functionality sa isang hierarchy ay hindi nangangailangan ng pagbabago sa isa pa. Iyan ay mabuti at mabuti, ngunit ang kahulugan na ito ay napakalawak at hindi sumasagot sa pinakamahalagang tanong: "Ano ang pattern ng tulay?" Sa tingin ko magiging mas madali para sa iyo na maunawaan ang praktikal na aplikasyon nito. Kaya kaagad, gumawa tayo ng klasikong senaryo para sa pattern ng tulay. Mayroon kaming abstractShape
class, na kumakatawan sa isang generic na geometric figure:
-
Shape.java
public abstract class Shape { public abstract void draw(); }
Kapag nagpasya kaming magdagdag ng mga hugis tulad ng mga tatsulok at parihaba, gagawin namin silang magmana ng
Shape
klase: -
Rectangle.java:
public class Rectangle extends Shape { @Override public void draw() { System.out.println("Drawing rectangle"); } }
-
Triangle.java:
public class Triangle extends Shape { @Override public void draw() { System.out.println("Drawing triangle"); } }
draw()
pamamaraan ay depende sa kulay na ito. Upang magkaroon ng iba't ibang pagpapatupad ng draw()
pamamaraan, kailangan nating lumikha ng isang klase para sa bawat kumbinasyon ng hugis-kulay. Kung mayroon tayong tatlong kulay, kailangan natin ng anim na klase: TriangleBlack
, TriangleGreen
, TriangleRed
, RectangleBlack
, RectangleGreen
at RectangleRed
. Ang anim na klase ay hindi isang malaking problema. Ngunit! Kung kailangan nating magdagdag ng bagong hugis o kulay, kung gayon ang bilang ng mga klase ay lumalaki nang husto. Paano makaalis sa ganitong sitwasyon? Ang pag-imbak ng kulay sa isang field at pag-enumerate ng lahat ng opsyon gamit ang mga conditional statement ay hindi ang pinakamahusay na solusyon. Ang isang magandang solusyon ay ang paglipat ng kulay sa isang hiwalay na interface. Wala pang maagang sinabi kaysa tapos na: gumawa tayo ng Color
interface na may tatlong pagpapatupad: BlackColor
, GreenColor
at RedColor
:
-
Color.java:
public interface Color { void fillColor(); }
-
BlackColor.java:
public class BlackColor implements Color { @Override public void fillColor() { System.out.println("Filling in black color"); } }
-
GreenColor.java
public class GreenColor implements Color { @Override public void fillColor() { System.out.println("Filling in green color"); } }
-
RedColor.java
public class RedColor implements Color { @Override public void fillColor() { System.out.println("Filling in red color"); } }
Ngayon ay nagdaragdag kami ng isang
Color
patlang saShape
klase. Makukuha natin ang halaga nito sa constructor. -
Shape.java:
public abstract class Shape { protected Color color; public Shape(Color color) { this.color = color; } public abstract void draw(); }
Gagamitin namin ang
color
variable saShape
mga pagpapatupad. Nangangahulugan ito na magagamit na ng mga hugis ang functionality ngColor
interface. -
Rectangle.java
public class Rectangle extends Shape { public Rectangle(Color color) { super(color); } @Override public void draw() { System.out.println("Drawing rectangle"); color.fillColor(); } }
Color color
field ay isang tulay na nag-uugnay sa dalawang magkahiwalay na hierarchy ng klase.
Paano bumuo ng isang tulay: abstraction at pagpapatupad
Tingnan natin ang isang class diagram na naglalarawan sa pattern ng tulay:
- Ang abstraction ay ang
Shape
klase - Ang RefinedAbstraction ay ang
Triangle
atRectangle
mga klase - Ang tagapagpatupad ay ang
Color
interface - Ang ConcreteImplementor ay ang
BlackColor
,GreenColor
atRedColor
mga klase.
Shape
klase ay isang abstraction — isang mekanismo para sa pamamahala ng pagpuno ng mga hugis na may iba't ibang kulay, na nagde-delegate sa Color
interface (Implementor). Ang Triangle
at Rectangle
mga klase ay mga kongkretong klase na gumagamit ng mekanismong ginawang available ng Shape
klase. BlackColor
, GreenColor
at RedColor
mga konkretong pagpapatupad sa hierarchy ng Pagpapatupad.
Kung saan gagamitin ang pattern ng tulay
Ang isang malaking benepisyo ng paggamit ng pattern na ito ay na maaari kang gumawa ng mga pagbabago sa mga functional na klase sa isang hierarchy nang hindi sinisira ang lohika ng isa pa. Gayundin, nakakatulong ang diskarteng ito upang mabawasan ang pagsasama sa pagitan ng mga klase. Ang pangunahing kinakailangan kapag ginagamit ang pattern na ito ay "sundin ang mga tagubilin" — huwag balewalain ang alinman sa mga ito! Sa layuning iyon, alamin natin ang mga sitwasyon kung kailan dapat mong gamitin ang pattern ng tulay:-
Kung kailangan mong palawakin ang bilang ng mga entity batay sa mga kumbinasyon ng dalawang konsepto (hal. mga hugis at kulay).
-
Kung gusto mong hatiin ang isang malaking klase na hindi nakakatugon sa prinsipyo ng single-responsibility sa mas maliliit na klase na may makitid na functionality.
-
Kung kinakailangan na gumawa ng mga pagbabago sa lohika ng ilang mga entity habang tumatakbo ang programa.
-
Kung kinakailangan upang itago ang isang pagpapatupad mula sa mga kliyente ng klase o library.
Mga kalamangan at kahinaan ng pattern
Tulad ng iba pang mga pattern, ang tulay ay may parehong mga pakinabang at disadvantages. Mga kalamangan ng pattern ng tulay:- Pinapabuti nito ang scalability ng code — maaari kang magdagdag ng functionality nang walang takot na masira ang isang bagay sa ibang bahagi ng program.
- Binabawasan nito ang bilang ng mga subclass kapag ibatay ang bilang ng mga entity sa mga kumbinasyon ng dalawang konsepto (halimbawa, mga hugis at kulay).
- Ginagawa nitong posible na magkahiwalay na magtrabaho sa dalawang magkahiwalay na hierarchy — Abstraction at Implementation. Dalawang magkaibang developer ang maaaring gumawa ng mga pagbabago nang hindi sinisiyasat ang mga detalye ng code ng bawat isa.
- Binabawasan nito ang pagkakabit sa pagitan ng mga klase — ang tanging lugar kung saan pinagsasama ang dalawang klase ay ang tulay (ibig sabihin, ang
Color color
field).
- Depende sa partikular na sitwasyon at sa pangkalahatang istraktura ng isang proyekto, maaari itong negatibong makaapekto sa pagganap ng isang programa (halimbawa, kung kailangan mong simulan ang higit pang mga bagay).
- Ginagawa nitong hindi gaanong nababasa ang code dahil sa pangangailangang lumipat sa pagitan ng dalawang klase.
GO TO FULL VERSION