JavaRush /Блоги Java /Random-TG /Намунаи тарроҳии пул

Намунаи тарроҳии пул

Дар гурӯҳ нашр шудааст
Салом! Мо дарк кардани мавзӯи васеъ ва хеле муфидро идома медиҳем - намунаҳои тарроҳӣ. Имрӯз мо дар бораи Bridge сӯҳбат хоҳем кард. Мисли дигар намунаҳо, Bridge барои ҳалли мушкилоти умумӣ, ки таҳиягар ҳангоми тарҳрезии меъмории нармафзор дучор мешавад, хидмат мекунад. Биёед имрӯз хусусиятҳои онро омӯзем ва чӣ тавр истифода бурдани онро фаҳмем.

Намунаи Bridge чист?

Намунаи Bridge як намунаи тарҳрезии сохторӣ мебошад. Яъне вазифаи асосии он сохтани сохтори мукаммали синфхо ва an objectхо мебошад. Bridge ин мушкилотро тавассути ҷудо кардани як ё якчанд синфҳо ба иерархияҳои алоҳида ҳал мекунад - абстраксия ва татбиқ . Тағйир додани функсия дар як иерархия боиси тағйирот дар зинаи дигар намегардад. Ҳама чиз равшан ба назар мерасад, аммо дар асл ин таъриф хеле васеъ садо медиҳад ва ба саволи асосӣ ҷавоб намедиҳад: "Нақли Bridge чист?" Ман фикр мекунам, ки ин барои шумо дар амал осонтар хоҳад буд. Биёед фавран як намунаи классикиро барои намунаи Bridge модел кунем. Мо як синфи абстрактӣ дорем Shape, ки умуман фигураи геометриро тавсиф мекунад:
  • Shape.java

    public abstract class Shape {
       public abstract void draw();
    }

    Вақте ки мо тасмим гирифтем, ки шаклҳои секунҷа ва росткунҷаро илова кунем, мо аз синф мерос мегирем Shape:

  • 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(). Барои татбиқи гуногуни усул draw(), мо бояд синферо барои ҳар як шакли ба ранг мувофиқ созем. Агар се ранг мавҷуд бошад, пас шаш синф вуҷуд дорад: TriangleBlack, TriangleGreen, TriangleRed, RectangleBlack, RectangleGreenва RectangleRed. Шаш синф он қадар калон нест. Аммо! Агар ба мо лозим шавад, ки шакл ё ранги нав илова кунем, шумораи синфҳо ба таври экспоненсиалӣ меафзояд. Чӣ тавр аз ин вазъият баромадан мумкин аст? Нигоҳ доштани рангҳо дар майдон ва кӯшиши интихобҳо тавассути шартҳо роҳи беҳтарин нест. Як ҳалли хуб ин намоиш додани ранг дар интерфейси алоҳида аст . Дере нагузашта гуфт: биёед интерфейс Colorва се амали он - BlackColor, GreenColorва -ро созем 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");
       }
    }

    Акнун биёед майдони типро Colorба синф илова кунем Shape- мо арзиши онро дар конструктор мегирем.

  • Shape.java:

    public abstract class Shape {
       protected Color color;
    
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }

    colorМо тағирёбандаро дар татбиқ истифода хоҳем кард Shape. Ин маънои онро дорад, ки шаклҳо акнун метавонанд функсияи интерфейсро истифода баранд Color.

  • 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пулест, ки ду иерархияи синфҳои алоҳидаро ба ҳам мепайвандад.

Дастгоҳи пул: абстраксия ва татбиқ чист

Биёед ба диаграммаи синфҳо назар андозем, ки намунаи Bridge-ро тавсиф мекунад: Муқаддима ба намунаи тарҳрезии Bridge - 2Дар ин ҷо шумо ду сохтори мустақилро мебинед, ки онҳоро бидуни таъсир ба фаъолияти ҳамдигар тағир додан мумкин аст. Дар ҳолати мо ин аст:
  • Абстраксия - синф Shape;
  • RefinedAbstraction - синфҳо Triangle, Rectangle;
  • Иҷрокунанда - интерфейс Color;
  • ConcreteImplementor - синфҳо BlackColorва GreenColor.RedColor
Синф Shapeабстраксияро ифода мекунад - механизми идоракунии рангкунии шаклҳо бо рангҳои гуногун, ки Амалиётро ба интерфейс вогузор мекунад Color. Синфҳо an objectҳои воқеӣ Triangleмебошанд Rectangle, ки механизми пешниҳодкардаи синфро истифода мебаранд Shape. BlackColor, GreenColorва RedColor- татбиқи мушаххас дар бахши татбиқ. Онҳоро аксар вақт платформа меноманд.

Намунаи Bridge дар куҷо истифода мешавад?

Бартарии бузурги истифодаи ин намуна дар он аст, ки шумо метавонед ба фаъолияти синфҳо дар як фorал бе вайрон кардани мантиқи дигараш тағирот ворид кунед. Ин равиш инчунин ба коҳиш додани пайвастагии синфҳои барнома мусоидат мекунад. Шарти асосии истифодабарии намунаҳо ин «иҷрои дастурҳо» аст: онҳоро дар ҳеҷ ҷо нагузоред! Воқеан, биёед бифаҳмем, ки дар кадом ҳолатҳо шумо бояд Bridge-ро истифода баред:
  1. Агар зарур бошад, ки шумораи an objectҳоро дар ду самт (шаклҳои геометрӣ, рангҳо) васеъ кунед.

  2. Агар шумо хоҳед, ки синфи калонеро, ки ба принсипи масъулияти ягона ҷавобгӯ нест, ба синфҳои хурдтар бо функсияҳои профor танг тақсим кунед.

  3. Агар зарурати ворид кардани тағирот ба мантиқи кори баъзе an objectҳо ҳангоми иҷрои барнома вуҷуд дошта бошад.

  4. Агар лозим бошад, татбиқро аз муштариёни синф (китобхона) пинҳон кунед.

Ҳангоми истифодаи намуна ҳар дафъа шумо бояд дар хотир дошта бошед, ки он ба code an objectҳои иловагӣ илова мекунад - истифодаи он дар лоиҳае, ки танҳо як рақами геометрӣ ва як ё ду ранги имконпазир мавҷуд аст, комилан мантиқӣ нест.

Тарафҳои мусбат ва манфии намуна

Мисли дигар намунаҳо, Пул ҳам афзалиятҳо ва ҳам камбудиҳо дорад. Манфиатҳои Bridge:
  1. Миқёспазирии codeро беҳтар мекунад - шумо метавонед бе тарси шикастани чизе дар қисми дигари барнома функсия илова кунед.
  2. Шумораи зерсинфҳоро кам мекунад - вақте кор мекунад, ки шумораи an objectҳоро дар ду самт васеъ кардан лозим аст (масалан, шумораи шаклҳо ва шумораи рангҳо).
  3. Имкон медиҳад, ки дар ду шохаи мустақor абстраксия ва амалӣ кор карда шавад - ин корро ду таҳиягари гуногун бидуни омӯхтани ҷузъиёти codeи ҳамдигар анҷом дода метавонанд.
  4. Коҳиш додани пайвастагии синфҳо - ягона ҷойе, ки ду синф пайваст мешаванд, пул аст (майдон Color color).
Камбудиҳои Bridge:
  1. Вобаста ба вазъияти мушаххас ва сохтори лоиҳа дар маҷмӯъ, метавонад ба ҳосилнокии барнома таъсири манфӣ дошта бошад (масалан, агар an objectҳои бештар бояд оғоз карда шаванд).
  2. Хониши codeро аз сабаби зарурати паймоиш байни синфҳо мушкил мекунад.

Тафовут аз намунаи стратегия

Намунаи Bridge аксар вақт бо намунаи дигари тарроҳӣ, Стратегия омехта карда мешавад. Ҳардуи онҳо композитсияро истифода мебаранд (дар мисоли шаклҳо ва рангҳо мо ҷамъкуниро истифода кардем, аммо намунаи Bridge инчунин метавонад композитсияро истифода барад) тавассути додани кор ба дигар an objectҳо. Аммо дар байни онҳо фарқият вуҷуд дорад ва он хеле бузург аст. Намунаи Стратегия як намунаи рафтор аст: он мушкилоти тамоман гуногунро ҳал мекунад. Стратегия имкон медиҳад, ки алгоритмҳо иваз карда шаванд, дар ҳоле ки Bridge абстраксияро аз татбиқ ҷудо мекунад, то интихоби байни татбиқҳои гуногунро фароҳам орад. Яъне, Bridge, бар хилофи Стратегия, ба тамоми сохторҳо ё сохторҳои иерархӣ дахл дорад. Намунаи Bridge метавонад як силоҳи хуб дар арсенали таҳиягар бошад; чизи асосӣ ин аст, ки он ҳолатҳоеро пайдо кунед, ки дар он ҷо истифода бурдан лозим аст ё ягон намунаи дигарро истифода баред. Агар шумо то ҳол бо қолабҳои дигар шинос набошед, ин маводҳоро хонед:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION