91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中什么是開閉原則

發布時間:2022-02-08 09:27:04 來源:億速云 閱讀:127 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java中什么是開閉原則,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1.什么是開閉原則?

  • 開閉原則(Open Closed Principle)是編程中最基礎、最重要的設計原則。

  • 一個軟件實體如類,模塊和函數應該對擴展開放(對提供方),對修改關閉(對使用方)。用抽象構建框架,用實現擴展細節。

  • 當軟件需要變化時,盡量通過擴展軟件實體的行為來實現變化,而不是通過修改已有的代碼來實現變化。

  • 編程中遵循其它原則,以及使用設計模式的目的就是遵循開閉原則。

2.違反Ocp代碼案例

Java中什么是開閉原則

package com.szh.principle.ocp;
 
/**
 *
 */
//Shape類,基類
class Shape {
    int m_type;
}
 
class Rectangle extends Shape {
    Rectangle() {
        super.m_type = 1;
    }
}
 
class Circle extends Shape {
    Circle() {
        super.m_type = 2;
    }
}
 
//這是一個用于繪圖的類 [使用方]
class GraphicEditor {
    //接收Shape對象,然后根據type,來繪制不同的圖形
    public void drawShape(Shape s) {
        if (s.m_type == 1)
            drawRectangle(s);
        else if (s.m_type == 2)
            drawCircle(s);
    }
 
    //繪制矩形
    public void drawRectangle(Shape r) {
        System.out.println(" 繪制矩形 ");
    }
 
    //繪制圓形
    public void drawCircle(Shape r) {
        System.out.println(" 繪制圓形 ");
    }
}
 
public class Ocp {
    public static void main(String[] args) {
        //使用看看存在的問題
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
    }
}

Java中什么是開閉原則

根據上面的代碼及運行結果來看,沒一點問題,我們如愿的畫出了矩形、圓形。但是現在有了一個新的需求,說 要增添一個圖形(三角形),使代碼完成對三角形的繪制,那么我們就需要對上面的代碼進行修改。

package com.szh.principle.ocp;
 
/**
 *
 */
//Shape類,基類
class Shape {
    int m_type;
}
 
class Rectangle extends Shape {
    Rectangle() {
        super.m_type = 1;
    }
}
 
class Circle extends Shape {
    Circle() {
        super.m_type = 2;
    }
}
 
//新增畫三角形
class Triangle extends Shape {
    Triangle() {
        super.m_type = 3;
    }
}
 
//這是一個用于繪圖的類 [使用方]
class GraphicEditor {
    //接收Shape對象,然后根據type,來繪制不同的圖形
    public void drawShape(Shape s) {
        if (s.m_type == 1)
            drawRectangle(s);
        else if (s.m_type == 2)
            drawCircle(s);
        else if (s.m_type == 3)
            drawTriangle(s);
    }
 
    //繪制矩形
    public void drawRectangle(Shape r) {
        System.out.println(" 繪制矩形 ");
    }
 
    //繪制圓形
    public void drawCircle(Shape r) {
        System.out.println(" 繪制圓形 ");
    }
 
    //繪制三角形
    public void drawTriangle(Shape r) {
        System.out.println(" 繪制三角形 ");
    }
}
 
public class Ocp {
    public static void main(String[] args) {
        //使用看看存在的問題
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        graphicEditor.drawShape(new Triangle());
    }
}

Java中什么是開閉原則

對代碼的修改完成了,也按照要求繪制出了三角形。但是大家仔細對比上面這兩段代碼,你會發現:第一,改動的地方偏多;第二,在使用方 GraphicEditor 類中也做了修改。  這就明顯違反了開閉原則中的 對修改關閉 這個規則。

我們需要的是 對擴展開放,對修改關閉 的規則,也就是說增添一個三角形的時候,我們只需要在提供方做修改,在使用方是無需修改的。

也就是說,當我們給一個類增添新的功能時,盡量不修改代碼,或者是盡量少的修改代碼。

3.遵守Ocp代碼案例

思路:  把創建Shape類做成抽象類,并提供一個抽象的draw方法,讓子類去實現即可,這樣我們有新的圖形種類時,只需要讓新的圖形類繼承Shape,并實現 draw方法即可,使用方的代碼就不需要修 → 滿足了開閉原則。

package com.szh.principle.ocp.improve;
 
/**
 *
 */
//Shape類,基類
abstract class Shape {
    int m_type;
    public abstract void draw();//抽象方法
}
 
class Rectangle extends Shape {
    Rectangle() {
        super.m_type = 1;
    }
 
    @Override
    public void draw() {
        System.out.println(" 繪制矩形 ");
    }
}
 
class Circle extends Shape {
    Circle() {
        super.m_type = 2;
    }
 
    @Override
    public void draw() {
        System.out.println(" 繪制圓形 ");
    }
}
 
//這是一個用于繪圖的類 [使用方]
class GraphicEditor {
    //接收Shape對象,調用draw方法
    public void drawShape(Shape s) {
        s.draw();
    }
}
 
public class Ocp {
    public static void main(String[] args) {
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
    }
}

Java中什么是開閉原則

上面是改進之后的代碼,此時我們還像之前的案例一樣,增添一個新的圖形(三角形),并完成對三角形的繪制,那么對上面代碼的修改就少之又少了。

修改代碼如下:????????????

package com.szh.principle.ocp.improve;
 
/**
 *
 */
//Shape類,基類
abstract class Shape {
    int m_type;
    public abstract void draw();//抽象方法
}
 
class Rectangle extends Shape {
    Rectangle() {
        super.m_type = 1;
    }
 
    @Override
    public void draw() {
        System.out.println(" 繪制矩形 ");
    }
}
 
class Circle extends Shape {
    Circle() {
        super.m_type = 2;
    }
 
    @Override
    public void draw() {
        System.out.println(" 繪制圓形 ");
    }
}
 
//新增畫三角形
class Triangle extends Shape {
    Triangle() {
        super.m_type = 3;
    }
 
    @Override
    public void draw() {
        System.out.println(" 繪制三角形 ");
    }
}
 
//這是一個用于繪圖的類 [使用方]
class GraphicEditor {
    //接收Shape對象,調用draw方法
    public void drawShape(Shape s) {
        s.draw();
    }
}
 
public class Ocp {
    public static void main(String[] args) {
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        graphicEditor.drawShape(new Triangle());
    }
}

可以看到,我們對提供方代碼中新增了一個 Triangle 類,它來完成對三角形的繪制。而自始至終我們的使用方 GraphicEditor 類都沒有做任何的修改。

這就自然而然的滿足了開閉原則中的 對擴展開發、對修改關閉 了。

Java中什么是開閉原則

關于“Java中什么是開閉原則”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙海市| 波密县| 营山县| 隆回县| 松原市| 公主岭市| 东阳市| 关岭| 西充县| 白城市| 吉水县| 梅河口市| 镇原县| 文昌市| 辽中县| 腾冲县| 泰兴市| 遵义市| 山西省| 淮滨县| 雅安市| 库车县| 旬阳县| 丰县| 永清县| 彰化县| 庆城县| 白河县| 凤山市| 东莞市| 广昌县| 万全县| 南木林县| 蒙自县| 林甸县| 营口市| 静宁县| 北海市| 太原市| 东安县| 定州市|