1. 程式人生 > 其它 >設計模式(2):JAVA(2):軟體設計原則(2)開閉原則:對擴充套件開放(新功能),對修改關閉(舊功能)

設計模式(2):JAVA(2):軟體設計原則(2)開閉原則:對擴充套件開放(新功能),對修改關閉(舊功能)

開閉原則:對擴充套件開放(新功能),對修改關閉(舊功能)

建立了一個汽車物件

class Car {
        private String band;
        private String color;
        private float price;

        public String getBand() {
            return band;
        }

        public void setBand(String band) {
            this.band = band;
        }

        
public String getColor() { return color; } public void setColor(String color) { this.color = color; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override
public String toString() { return "Car{" + "band='" + band + '\'' + ", color='" + color + '\'' + ", price=" + price + '}'; } } public static void main(String[] args) { Car car = new Car(); car.setBand(
"bm"); car.setColor("red"); car.setPrice(13.3f); System.out.println(car.toString()); }

當變化來臨時,例如汽車的價格現在需要打折(打8折),這時,我們在Car的原始碼中修改,就違反了開閉原則

反例:修改了原始碼

 public void setPrice(float price) {
            this.price = (price*0.08f);
        }

開發時,我們應該要去考慮變化的需求,屬性會在任何時刻都有可能產生變化

對待變化時,我們應該選擇擴充套件,而不是去修改原始碼(ps:在強制要求符合開閉原則的情況下!)

正例:

//進行擴充套件  
class DiscountCar extends Car{
        @Override
        public void setPrice(float price) {
            super.setPrice(price*0.08f);
        }
    }
    public static void main(String[] args) {
        //===使用向上轉型時,方法的呼叫只和new的物件有關
        Car car = new DiscountCar();
        car.setBand("bm");
        car.setColor("red");
        car.setPrice(130000f);
        System.out.println(car.toString());
    }

開閉原則應該遵循應用場景去考慮,如果原始碼就是你自己寫的,而且需求是穩定的,那麼,直接修改原始碼也是一個簡單的做法,但當原始碼是別人的程式碼或架構是,我們就要去符合開閉原則,防止破壞結構的完整性!

本文來自部落格園,作者:秋華,轉載請註明原文連結:https://www.cnblogs.com/qiu-hua/p/15227064.html