Teknologian jakaminen

Suunnittelumallin käyttöskenaarion toteutusesimerkkejä sekä edut ja haitat (rakennekuvio - välitysmalli, ulkonäkökuvio)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

rakenteellinen kuvio

Välityspalvelimen malli

Välityspalvelinmalli on rakenteellinen suunnittelumalli, joka ohjaa pääsyä toiseen kohteeseen ottamalla käyttöön välityspalvelinobjektin. Tämä välityspalvelinobjekti voi tarjota lisätoimintoja välityspalvelinobjektille, kuten pääsynhallinnan, laiska alustuksen, lokikirjauksen tai verkkoyhteyden.

Sovellettava kohtaus

  1. etäagentti

    • Tarjoaa paikallisen esityksen objektista eri osoiteavaruuksissa.
  2. virtuaalinen agentti

    • Luo kalliita esineitä tarpeen mukaan.
  3. suoja-aine

    • Hallitse pääsyä alkuperäiseen kohteeseen.
  4. Älykäs opastus

    • Suorita joitain lisätoimintoja, kun käytät objektia, kuten laskentatoimintoja tai viitteen tunnistusta.

Toteutusesimerkki (Java)

Seuraavassa on yksinkertainen toteutusesimerkki välityspalvelimen mallista, joka näyttää kuinka ohjataan pääsyä todelliseen kohteeseen välityspalvelinobjektin kautta.

1. Määritä teeman käyttöliittymä
public interface Subject {
    void request();
}
  • 1
  • 2
  • 3
  • havainnollistaaSubject Käyttöliittymä määrittelee arequest Method, tämä on menetelmä, joka sekä varsinaisen objektin että välityspalvelinobjektin on toteutettava.
2. Määrittele reaaliaineluokka (RealSubject)
public class RealSubject implements Subject {
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • havainnollistaaRealSubject luokka toteutettuSubject Käyttöliittymärequest Menetelmä, joka edustaa luokkaa, joka todella käsittelee pyynnön.
3. Määritä välityspalvelinluokka (välityspalvelin)
public class Proxy implements Subject {
    private RealSubject realSubject;

    public Proxy(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    public void request() {
        if (this.checkAccess()) {
            this.realSubject.request();
            this.logAccess();
        }
    }

    private boolean checkAccess() {
        // 检查访问权限
        System.out.println("Proxy: Checking access prior to firing a real request.");
        return true;
    }

    private void logAccess() {
        // 记录请求日志
        System.out.println("Proxy: Logging the time of request.");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • havainnollistaa
    • Proxy luokka toteutettuSubject käyttöliittymä ja sisältää aRealSubject esine.
    • olla olemassa request Metodissa proxy-luokka tarkistaa ensin pääsyoikeudet ja sitten kutsuu todellisen objektinrequest menetelmällä ja tallenna lopuksi pyyntöloki.
4. Asiakaskoodi
public class Client {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        Proxy proxy = new Proxy(realSubject);
        
        proxy.request();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • havainnollistaa
    • Client luokka luotuRealSubject jaProxy esine, läpiProxy Objektipuhelurequest tapa hallitaRealSubject Pääsy.

etu

  1. Eristäytyminen

    • Välityspalvelintila voi toimia välittäjänä soittajan ja todellisen kohteen välillä, mikä vähentää järjestelmän komponenttien välistä kytkentää ja parantaa objektien välistä eristystä.
  2. turvallisuutta

    • Pääsyä varsinaisiin objekteihin voidaan hallita välityspalvelinten kautta, mikä mahdollistaa turvatarkastukset ja perusteellisen todentamisen.
  3. Skaalautuvuus

    • Välityspalvelintilassa voidaan joustavasti lisätä toimintoja muuttamatta tiettyä objektikoodia.
  4. Älykäs

    • Jotkut lisätoiminnot, kuten viivästetty alustus ja pääsylokit, voidaan toteuttaa muuttamatta palveluobjektin käyttöliittymää.

puute

  1. koodin monimutkaisuus

    • Agenttien käyttöönotto tarkoittaa myös järjestelmän monimutkaisuuden lisäämistä, mahdollisesti uusien luokkien ja rajapintojen käyttöönottoa sekä koodin ymmärtämisen ja ylläpitokustannusten lisäämistä.
  2. Vasteaika

    • Välityspalvelintila saattaa hidastaa järjestelmän toimintaa, varsinkin jos välityspalvelimeen on lisätty paljon käsittelylogiikkaa.
  3. Suunnittelun vaikeus

    • Välityspalvelimen mallin asianmukainen suunnittelu ja toteuttaminen edellyttää järjestelmän kokonaissuunnittelun huolellista harkintaa, jotta voidaan varmistaa, ettei järjestelmän suorituskykyyn ole kielteisiä vaikutuksia.

Luokkakaavio

Client
  |
  v
Subject <---- Proxy <---- RealSubject
  • 1
  • 2
  • 3
  • 4

Tee yhteenveto

Välityspalvelinmalli tarjoaa tehokkaan tavan hallita ja hallita objektien käyttöä. Välityspalvelinten avulla voit lisätä erilaisia ​​toimintoja ja pitää samalla liikeobjektien vastuut selvänä. Tämä tila sopii erityisen hyvin skenaarioihin, jotka edellyttävät pääsynhallintaa ja muita liiketoimintaobjektien esikäsittelytoimintoja.

Julkisivukuvio

Julkisivukuvio on rakennesuunnittelumalli, joka helpottaa monimutkaisten osajärjestelmien käyttöä tarjoamalla yhtenäisen rajapinnan alajärjestelmän rajapintojen ryhmään pääsyä varten. Julkisivukuvio määrittelee korkean tason rajapinnan, joka tekee tämän osajärjestelmän käytöstä helpompaa.

Sovellettava kohtaus

  1. Yksinkertaista rajapintoja monimutkaisiin järjestelmiin

    • Tarjoa yksinkertainen käyttöliittymä monimutkaisille osajärjestelmille vähentääksesi ulkoisen vuorovaikutuksen monimutkaisuutta alijärjestelmien kanssa.
  2. Hierarkia

    • Monikerroksisessa järjestelmärakenteessa ulkoasukuvioita voidaan käyttää määrittelemään kunkin kerroksen sisäänkäynti ja yksinkertaistamaan kerrosten välisiä riippuvuuksia.
  3. Irrotettu järjestelmä

    • Ottamalla käyttöön ulkoasukuvio alijärjestelmän ja asiakkaan välinen kytkentä vähenee.

Toteutusesimerkki (Java)

Seuraavassa on yksinkertainen toteutusesimerkki Julkisivukuviosta, joka näyttää kuinka yksinkertaistaa alijärjestelmien käyttöä julkisivuluokkien avulla.

1. Määrittele osajärjestelmän luokat
public class SubsystemA {
    public void operationA() {
        System.out.println("SubsystemA: operationA");
    }
}

public class SubsystemB {
    public void operationB() {
        System.out.println("SubsystemB: operationB");
    }
}

public class SubsystemC {
    public void operationC() {
        System.out.println("SubsystemC: operationC");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
2. Määritä ulkoasuluokka
public class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    private SubsystemC subsystemC;

    public Facade() {
        this.subsystemA = new SubsystemA();
        this.subsystemB = new SubsystemB();
        this.subsystemC = new SubsystemC();
    }

    public void operation1() {
        System.out.println("Facade: operation1");
        subsystemA.operationA();
        subsystemB.operationB();
    }

    public void operation2() {
        System.out.println("Facade: operation2");
        subsystemB.operationB();
        subsystemC.operationC();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
3. Asiakaskoodi
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation1();
        facade.operation2();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Huomautuksia

  1. Alajärjestelmän luokka

    • SubsystemA, SubsystemB, ja SubsystemC Se on alijärjestelmän erityinen toteutusluokka, ja jokaisella luokalla on oma ainutlaatuinen toimintatapa.
  2. Ulkonäköluokka

    • Facade Luokat sisältävät alijärjestelmäobjekteja ja tarjoavat yksinkertaistettuja rajapintojaoperation1 jaoperation2 kutsua alijärjestelmän toimintoja.
  3. asiakaskoodi

    • Client luokka meni läpiFacade luokka soittaaoperation1 jaoperation2yksinkertaistaa siten monimutkaisten osajärjestelmien käyttöä.

etu

  1. Yksinkertaistettu käyttöliittymä

    • Ulkoasumalli tarjoaa yksinkertaisen käyttöliittymän alijärjestelmille, mikä vähentää alijärjestelmien kanssa vuorovaikutuksen monimutkaisuutta.
  2. löysä kytkentä

    • Ulkoasukuvio vähentää alijärjestelmän ja asiakkaan välistä yhteyttä, mikä auttaa parantamaan järjestelmän ylläpidettävyyttä ja skaalautuvuutta.
  3. parempi kerrostus

    • Ulkonäkömallit auttavat luomaan selkeän hierarkkisen rakenteen, joka määrittelee sisäänkäynnin jokaiselle tasolle.

puute

  1. Ei noudata auki-kiinni -periaatetta

    • Uusia alijärjestelmän toimintoja lisättäessä saattaa olla tarpeen muuttaa ulkoasuluokkaa, mikä rikkoo open-closed -periaatetta (avoin laajennuksille, suljettu muokkauksille).
  2. Voi aiheuttaa suorituskykyongelmia

    • Joissakin tapauksissa julkisivukuvion käyttö voi aiheuttaa järjestelmän suorituskyvyn heikkenemistä, koska kaikkien pyyntöjen on läpäistävä julkisivuluokka.

Luokkakaavio

Client
  |
  v
Facade ----> SubsystemA
          ----> SubsystemB
          ----> SubsystemC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Tee yhteenveto

Julkisivukuvio helpottaa monimutkaisten osajärjestelmien kanssa työskentelyä tarjoamalla yksinkertaistetun käyttöliittymän. Se sopii skenaarioihin, joissa on tarpeen yksinkertaistaa alijärjestelmän rajapintaa, vähentää suoraa vuorovaikutusta asiakkaan ja osajärjestelmän välillä ja irrottaa järjestelmähierarkia. Vaikka se saattaa loukata auki-kiinni -periaatetta, useimmissa tapauksissa sen edut ovat paljon suuremmat kuin sen haitat, mikä tekee järjestelmän suunnittelusta selkeämmän ja helpompia ylläpitää.