天天看點

軟體7大設計模式

1. 開閉原則

一個類或者接口最好是可以進行擴充和引用,所謂的開閉就是針對功能擴充和修改而言。 提高可複用性和可維護性。

ex:以java課程價格和活動打折為例。

  • 課程
public interface ICourse {
    Integer getId();

    String getName();

    Double getPrice();
}
           
  • java課程
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;
    }
}```


 -  java活動課程

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

    public Double getOriginJavaPrice() {
        return super.getPrice();
    }

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

2.依賴倒置原則

高層子產品不應依賴底層,二者都應依賴其抽象,針對接口程式設計,。提高可複用性解耦性。Spring中的依賴注入。

ex:

public interface ICourseStudy {
    void study();
}
           
public class JavaCourse implements ICourseStudy{
    @Override
    public void study() {
        System.out.println("tom正在學習");
    }
}
           
public class Tom {
    private ICourseStudy courseStudy;

    public void setCourseStudy(ICourseStudy courseStudy) {
        this.courseStudy = courseStudy;
    }

    public void study() {
        courseStudy.study();
    }
}
           

對于tom來講,學習另外的課程并不需要每次都自己去實作,僅僅是通過接口去擷取學習的課程而已。對于新的課程,隻需要建立一個類,通過傳 參的方式告訴 Tom,而不需要修改底層代碼。

3.接口功能隔離原則:、建立單一接口,不要建立龐大臃腫的接口。高倍局,低耦合

4.接口職責單一:接口的功能最好單一化,友善維護。

5.迪米特法則

最少知道原則,隻和朋友交流。朋友:成員變量,方法輸出,輸入中的變量。方法内不不是朋友。

7裡氏替換原則

子類可以擴充父類的功能,但不能改變父類原有的功能。

1、子類可以實作父類的抽象方法,但不能覆寫父類的非抽象方法。

2、子類中可以增加自己特有的方法。

3、當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入 參數更寬松。

4、當子類的方法實作父類的方法時(重寫/重載或實作抽象方法),方法的後置條件(即方法的輸 出/傳回值)要比父類更嚴格或相等。

7.合成複用原則