七個(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());
}
}