Rumah  >  Artikel  >  Java  >  Memahami Corak Reka Bentuk Strategi di Jawa

Memahami Corak Reka Bentuk Strategi di Jawa

王林
王林asal
2024-07-26 11:20:52971semak imbas

Understanding the Strategy Design Pattern in Java

Memahami Corak Reka Bentuk Strategi di Jawa

Masalah

Corak Strategi menangani keperluan untuk menentukan keluarga algoritma, merangkum setiap satu dan menjadikannya boleh ditukar ganti. Corak ini membolehkan algoritma berbeza secara bebas daripada pelanggan yang menggunakannya. Ia berguna apabila anda mempunyai pelbagai cara untuk melaksanakan tugas tertentu dan ingin memilih algoritma semasa masa jalan.

Penyelesaian

Corak Strategi melibatkan tiga komponen utama:

  1. Konteks: Objek yang mengandungi rujukan kepada objek strategi dan menggunakannya untuk melaksanakan algoritma.
  2. Strategi: Antara muka biasa untuk semua algoritma yang disokong. Konteks menggunakan antara muka ini untuk memanggil algoritma yang ditakrifkan oleh strategi konkrit.
  3. Strategi Konkrit: Kelas yang melaksanakan antara muka strategi, menyediakan algoritma khusus.

Konteks mewakilkan pelaksanaan algoritma kepada objek strategi, yang membolehkan algoritma dipilih pada masa jalan.

Kebaikan dan Keburukan

Kebaikan

  • Pengenkapsulan Algoritma: Setiap algoritma dirangkumkan dalam kelasnya sendiri, menjadikannya mudah untuk bertukar antara mereka dan menambah algoritma baharu tanpa mengubah konteks.
  • Prinsip Tanggungjawab Tunggal: Kelas konteks dipermudahkan kerana ia mewakilkan pelaksanaan algoritma kepada kelas strategi.
  • Prinsip Terbuka/Tertutup: Strategi baharu boleh diperkenalkan tanpa mengubah konteks atau kelas strategi sedia ada.

Kontra

  • Peningkatan Bilangan Kelas: Corak meningkatkan bilangan kelas dalam pangkalan kod disebabkan penciptaan kelas strategi baharu untuk setiap algoritma.
  • Kerumitan dalam Strategi Penukaran: Jika tidak diurus dengan baik, menukar strategi secara dinamik pada masa jalan boleh memperkenalkan kerumitan dan kemungkinan ralat.

Contoh Aplikasi Dunia Sebenar

Contoh praktikal corak Strategi adalah dalam sistem pemprosesan pembayaran yang kaedah pembayaran yang berbeza (cth., kad kredit, PayPal, pindahan bank) dilaksanakan sebagai strategi yang berbeza. Pelanggan boleh memilih strategi pembayaran yang sesuai semasa masa jalan.

Contoh Kod dalam Java

Corak strategi dalam kod:

java
// Strategy Interface
public interface PaymentStrategy {
    void pay(int amount);
}

// Concrete Strategy 1
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;

    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount + " paid with credit card " + cardNumber);
    }
}

// Concrete Strategy 2
public class PayPalPayment implements PaymentStrategy {
    private String email;

    public PayPalPayment(String email) {
        this.email = email;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount + " paid using PayPal account " + email);
    }
}

// Context
public class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9876-5432"));
        cart.checkout(100);

        cart.setPaymentStrategy(new PayPalPayment("user@example.com"));
        cart.checkout(200);
    }
}

Atas ialah kandungan terperinci Memahami Corak Reka Bentuk Strategi di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn