七個(gè)原則1-開閉原則

七個(gè)原則1-開閉原則

  • 定義:一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉
  • 用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)
  • 優(yōu)點(diǎn):提高軟件系統(tǒng)的可復(fù)用性及可維護(hù)性。

示例-開閉原則UML圖

示例:設(shè)計(jì)一個(gè)課程接口ICourse,并且實(shí)現(xiàn)一個(gè)Java課程實(shí)現(xiàn)類JavaCourse,當(dāng)增加打折需求并要求展示原價(jià)時(shí)如何設(shè)計(jì)? 增加JavaCourse的子類JavaDiscountCourse,重寫獲取getPrice方法,增加getOriginPrice方法。遵循對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。

示例-開閉原則UML

接口:Course

public interface ICourse {    
    Integer getId();    
    String getName();    
    Double getPrice();
}

類:JavaCourse

public class JavaCourse implements ICourse{
    private Integer id;
    private String name;
    private Double price;

    public JavaCourse(Integer id, String name, Double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public Integer getId() {
        return this.id;
    }
    @Override
    public String getName() {
        return this.name;
    }
    @Override
    public Double getPrice() {
        return this.price;
    }
}

類:JavaDiscountCourse

public class JavaDiscountCourse extends JavaCourse {
    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }

    public Double getDiscountPrice(){
        return super.getPrice()*0.8;
    }
}

測(cè)試類

public class Test {
    public static void main(String[] args) {
        ICourse iCourse = new JavaDiscountCourse(99,"Java設(shè)計(jì)模式學(xué)習(xí)",998d);
        JavaDiscountCourse javaCourse = (JavaDiscountCourse)iCourse;

        System.out.println("課程ID:"+javaCourse.getId()
                +"\n課程名稱:"+javaCourse.getName()
                +"\n課程折扣價(jià)格:"+javaCourse.getDiscountPrice()
                +"\n課程價(jià)格:"+javaCourse.getPrice());
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文出自《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》中的第一章。 1、優(yōu)化代碼的第一步——單一職責(zé)原則 單一職責(zé)原則的...
    MrSimp1e0閱讀 1,917評(píng)論 1 13
  • 轉(zhuǎn)載自 設(shè)計(jì)模式六大原則[http://www.uml.org.cn/sjms/201211023.asp#3] ...
    廚子閱讀 1,177評(píng)論 2 5
  • 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因。通俗的說,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)。 ...
    Jabir_Zhang閱讀 677評(píng)論 0 3
  • 程序設(shè)計(jì)的6大原則: 單一職責(zé)原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則開閉原則 從根本學(xué)好,理解為什么要...
    silencefun閱讀 2,474評(píng)論 1 4
  • 單一職責(zé)原則 (SRP) 全稱 SRP , Single Responsibility Principle 單一職...
    米莉_L閱讀 1,866評(píng)論 2 5

友情鏈接更多精彩內(nèi)容