首頁常見問題正文

請寫出一個符合開閉原則的設計模式的例子_java設計模式

更新時間:2023-09-06 來源:黑馬程序員 瀏覽量:

IT培訓班

  開閉原則是面向對象設計中的一個重要原則,它要求軟件實體(如類、模塊、函數(shù)等)應該對擴展開放,對修改關閉。也就是說,當需要添加新功能或修改現(xiàn)有功能時,不應該修改已有的代碼,而是通過擴展來實現(xiàn)。一個符合開閉原則的設計模式是"策略模式"(Strategy Pattern)。

  策略模式的主要目的是定義一系列算法,將每個算法封裝成一個獨立的策略類,然后客戶端可以選擇不同的策略對象來執(zhí)行不同的算法,而不需要改變客戶端的代碼。這種模式使得系統(tǒng)更加靈活,可以輕松添加新的策略,同時保持了代碼的可維護性和可擴展性。

1693966723380_java中符合開閉原則的設計模式.jpg

  下面筆者將詳細介紹策略模式的實現(xiàn):

  1. 定義策略接口:

  首先,我們定義一個策略接口,它包含一個執(zhí)行算法的方法:

interface PaymentStrategy {
    void pay(int amount);
}

  2. 實現(xiàn)具體策略類:

  然后,我們創(chuàng)建多個具體的策略類,每個類代表一種支付方式,實現(xiàn)了策略接口:

class CreditCardPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " via Credit Card");
    }
}

class PayPalPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " via PayPal");
    }
}

class CashPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " in cash");
    }
}

  3.創(chuàng)建上下文類:

  上下文類負責維護一個對策略對象的引用,并在需要時切換不同的策略:

class ShoppingCart {
    private PaymentStrategy paymentStrategy;

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

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

  4.客戶端使用策略模式:

  客戶端可以輕松地創(chuàng)建不同的支付策略對象并將其注入購物車對象,然后調用購物車的checkout方法來完成支付:

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

        // 選擇不同的支付策略
        cart.setPaymentStrategy(new CreditCardPayment());
        cart.checkout(1000);

        cart.setPaymentStrategy(new PayPalPayment());
        cart.checkout(500);

        cart.setPaymentStrategy(new CashPayment());
        cart.checkout(200);
    }
}

  通過策略模式,我們可以輕松地擴展系統(tǒng),添加新的支付方式,而不需要修改現(xiàn)有的代碼。這符合開閉原則,因為我們可以通過添加新的策略類來擴展系統(tǒng),而不會對購物車或客戶端代碼進行修改。這種模式使得系統(tǒng)更加靈活、可維護和可擴展。

分享到:
在線咨詢 我要報名
和我們在線交談!