Berbagi teknologi

Contoh implementasi skenario penggunaan pola desain serta kelebihan dan kekurangannya (pola struktural - pola proksi, pola tampilan)

2024-07-12

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

pola struktural

Pola Proksi

Pola Proxy adalah pola desain struktural yang mengontrol akses ke objek lain dengan memperkenalkan objek proxy. Objek proksi ini dapat memberikan fungsionalitas tambahan pada objek yang diproksi, seperti kontrol akses, inisialisasi lambat, pencatatan log, atau akses jaringan.

Adegan yang berlaku

  1. agen jarak jauh

    • Menyediakan representasi lokal dari suatu objek di ruang alamat yang berbeda.
  2. agen virtual

    • Buat benda mahal sesuai kebutuhan.
  3. agen perlindungan

    • Kontrol akses ke objek asli.
  4. Bimbingan cerdas

    • Lakukan beberapa operasi tambahan saat mengakses objek, seperti operasi penghitungan atau deteksi referensi.

Contoh implementasi (Jawa)

Berikut ini adalah contoh implementasi sederhana dari pola proksi, yang menunjukkan cara mengontrol akses ke objek sebenarnya melalui objek proksi.

1. Tentukan antarmuka tema
public interface Subject {
    void request();
}
  • 1
  • 2
  • 3
  • menjelaskanSubject Antarmuka mendefinisikan arequest Metode, ini adalah metode yang perlu diterapkan oleh objek aktual dan objek proxy.
2. Menentukan kelas mata pelajaran sebenarnya (RealSubject)
public class RealSubject implements Subject {
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • menjelaskanRealSubject kelas dilaksanakanSubject Antarmukarequest Metode, mewakili kelas yang benar-benar menangani permintaan tersebut.
3. Tentukan kelas proksi (Proxy)
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
  • menjelaskan
    • Proxy kelas dilaksanakanSubject antarmuka dan memegang aRealSubject obyek.
    • ada request Dalam metode ini, kelas proxy terlebih dahulu memeriksa izin akses dan kemudian memanggil objek sebenarnyarequest metode, dan terakhir catat log permintaan.
4. Kode klien
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
  • menjelaskan
    • Client kelas dibuatRealSubject DanProxy objek, melaluiProxy Panggilan objekrequest metode untuk mengendalikanRealSubject Mengakses.

keuntungan

  1. Isolasi

    • Mode proxy dapat berfungsi sebagai perantara antara pemanggil dan objek sebenarnya, mengurangi sambungan antar komponen sistem dan meningkatkan isolasi antar objek.
  2. keamanan

    • Akses ke objek sebenarnya dapat dikontrol melalui proxy, memungkinkan pemeriksaan keamanan dan verifikasi mendalam.
  3. Skalabilitas

    • Mode proxy dapat secara fleksibel menambahkan fungsi tanpa mengubah kode objek tertentu.
  4. Cerdas

    • Beberapa operasi tambahan, seperti inisialisasi tertunda dan log akses, dapat diterapkan tanpa mengubah antarmuka objek layanan.

kekurangan

  1. kompleksitas kode

    • Memperkenalkan agen juga berarti meningkatkan kompleksitas sistem, kemungkinan memperkenalkan kelas dan antarmuka baru, serta meningkatkan pemahaman kode dan biaya pemeliharaan.
  2. Waktu merespon

    • Mode proxy dapat menyebabkan sistem berjalan lebih lambat, terutama jika banyak logika pemrosesan ditambahkan ke operasi proxy.
  3. Kesulitan desain

    • Merancang dan menerapkan pola proksi dengan benar memerlukan pertimbangan yang cermat terhadap desain sistem secara keseluruhan untuk memastikan tidak ada dampak negatif pada kinerja sistem.

Diagram Kelas

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

Meringkaskan

Pola proksi menyediakan cara yang efisien untuk mengontrol dan mengelola akses ke objek. Dengan menggunakan proxy, Anda dapat menambahkan berbagai fungsi sekaligus menjaga tanggung jawab objek bisnis tetap jelas. Mode ini sangat cocok untuk skenario yang memerlukan kontrol akses dan operasi pra-pemrosesan lainnya pada objek bisnis.

Pola Fasad

Pola Fasad adalah pola desain struktural yang membuat subsistem kompleks lebih mudah digunakan dengan menyediakan antarmuka terpadu untuk mengakses sekelompok antarmuka dalam subsistem. Pola fasad mendefinisikan antarmuka tingkat tinggi yang membuat subsistem ini lebih mudah digunakan.

Adegan yang berlaku

  1. Sederhanakan antarmuka ke sistem yang kompleks

    • Menyediakan antarmuka sederhana untuk subsistem yang kompleks untuk mengurangi kompleksitas interaksi eksternal dengan subsistem.
  2. Hirarki

    • Dalam struktur sistem multi-layer, pola tampilan dapat digunakan untuk menentukan pintu masuk ke setiap lapisan dan menyederhanakan ketergantungan antar lapisan.
  3. Sistem terpisah

    • Dengan memperkenalkan pola tampilan, hubungan antara subsistem dan klien berkurang.

Contoh implementasi (Jawa)

Berikut ini adalah contoh implementasi sederhana dari pola Fasad, yang menunjukkan cara menyederhanakan penggunaan subsistem melalui kelas fasad.

1. Tentukan kelas subsistem
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. Tentukan kelas penampilan
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. Kode klien
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation1();
        facade.operation2();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Catatan

  1. Kelas subsistem

    • SubsystemA, SubsystemB, Dan SubsystemC Ini adalah kelas implementasi spesifik dari subsistem, dan setiap kelas memiliki metode operasi uniknya sendiri.
  2. Kelas penampilan

    • Facade Kelas menampung objek subsistem dan menyediakan antarmuka yang disederhanakanoperation1 Danoperation2 untuk memanggil fungsi subsistem.
  3. kode klien

    • Client kelas berlaluFacade kelas untuk dihubungioperation1 Danoperation2, sehingga menyederhanakan penggunaan subsistem yang kompleks.

keuntungan

  1. Antarmuka yang disederhanakan

    • Pola tampilan menyediakan antarmuka sederhana untuk subsistem, mengurangi kompleksitas interaksi dengan subsistem.
  2. kopling longgar

    • Pola tampilan mengurangi hubungan antara subsistem dan klien, yang membantu meningkatkan pemeliharaan dan skalabilitas sistem.
  3. pelapisan yang lebih baik

    • Pola penampilan membantu membangun struktur hierarki yang jelas, menentukan pintu masuk ke setiap level.

kekurangan

  1. Tidak mematuhi prinsip buka-tutup

    • Saat menambahkan fungsi subsistem baru, kelas tampilan mungkin perlu diubah, yang melanggar prinsip buka-tutup (terbuka untuk ekstensi, tertutup untuk modifikasi).
  2. Dapat menyebabkan masalah kinerja

    • Dalam beberapa kasus, penggunaan pola fasad dapat menyebabkan penurunan kinerja sistem karena semua permintaan harus melalui kelas fasad.

Diagram Kelas

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

Meringkaskan

Pola Fasad membuat bekerja dengan subsistem yang kompleks menjadi lebih mudah dengan menyediakan antarmuka yang disederhanakan. Cocok untuk skenario yang memerlukan penyederhanaan antarmuka subsistem, mengurangi interaksi langsung antara klien dan subsistem, dan memisahkan hierarki sistem. Meskipun berpotensi melanggar prinsip buka-tutup, dalam banyak kasus, kelebihannya jauh lebih besar daripada kerugiannya, sehingga desain sistem menjadi lebih jelas dan mudah dipelihara.