設計模式(1)-- 七大軟件設計原則-開閉原則


前言

 

  學習設計原則,學習設計模式的基礎。在實際開發過程中,並不是一定要求所有代碼都遵循設計原則,我們要考慮人力、時間、成本、質量,不是刻意追求完美,要在適當的場景遵循設計原則,體現的是一種平衡取舍,幫助我們設計出更加優雅的代碼結構。

開閉原則Open-Closed Principle, OCP)

  定義 : 一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉,開閉原則也是其他五個原則的基石

 

  開閉原則是指一個軟件實體如類、模塊和函數應該對擴展開放, 對修改關閉。所謂的開閉,也正是對擴展和修改兩個行為的一個原則。強調的是用抽象構建框架,用實現擴展細節。可以提高軟件系統的可復用性及可維護性。

  開閉原則是面向對象設計中最基礎的設計原則。它指導我們如何建立穩定靈活的系統,例如:我們版本更新,我盡可能不修改源代碼,但是可以增加新功能。

  在現實生活中對於開閉原則也有體現。比如,很多互聯網公司都實行彈性制作息時間,規定每天工作 8 小時。意思就是說,對於每天工作 8 小時這個規定是關閉的,但是你什么時候來,什么時候走是開放的。早來早走,晚來晚走。

  下面我們以華為手機為例,首先創建一個華為手機接口:IHuaWei:

package com.wbg.dpsp.openClose;

/**
 * @author WBG
 * @date 2020/8/2 0:14
 * @describe 華為手機
 */
public interface IHuaWei {
    String getUUID();//主鍵
    String getName();//名稱
    Double getPrice();//價格
}
View Code

 

 

  

 

   華為手機分為2G\3G\4G\5G,我們來創建一個G5手機

package com.wbg.dpsp.openClose;

/**
 * @author WBG
 * @date 2020/8/2 0:23
 * @describe //華為5G
 */
public class HuaWei5G implements IHuaWei {
    private String UUID;
    private String name;
    private Double price;

    public HuaWei5G() {
    }

    public HuaWei5G(String UUID, String name, Double price) {
        this.UUID = UUID;
        this.name = name;
        this.price = price;
    }

    public String getUUID() {
        return this.UUID;
    }

    public String getName() {
        return this.name;
    }

    public Double getPrice() {
        return this.price;
    }
}
View Code

 

  

 

 

 華為5G需要做一個活動,價格優惠,如果修改HuaWei5G中的getPrice()方法,則會影響其他地方調用,我們如何在不修改原有代碼前提前下,實現價格優惠這個功能呢?現在,我們再寫一個處理優惠邏輯的類:HuaWei5GDiscount

package com.wbg.dpsp.openClose;

/**
 * @author WBG
 * @date 2020/8/2 0:25
 * @describe 華為5G促銷活動
 */
public class HuaWei5GDiscount extends HuaWei5G {

    public HuaWei5GDiscount() {
        super();
    }

    public HuaWei5GDiscount(String UUID, String name, Double price) {
        super(UUID, name, price);
    }

    //打折活動
    public Double getDiscountPrice() {
        //六折優惠
        return super.getPrice() * 0.85;
    }
    
}
View Code

 

 

測試結果:

package com.wbg.dpsp.openClose;

/**
 * @author WBG
 * @date 2020/8/2 0:30
 * @describe
 */
public class Test {
    public static void main(String[] args) {
        IHuaWei iHuaWei = new HuaWei5GDiscount("202008020031001","華為麥芒 9",2199.00);
        HuaWei5GDiscount huaWei5GDiscount = (HuaWei5GDiscount) iHuaWei;
        System.out.println("手機標識號:" + huaWei5GDiscount.getUUID() +
                "手機名稱:《" +  huaWei5GDiscount.getName() + "》" +
                "\n原價:" + huaWei5GDiscount.getPrice() +
                "\n售價:" + huaWei5GDiscount.getDiscountPrice());
    }
}
View Code

 

 

 

 類結構圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM