ソフトウェア設計の七大原則の一つである開閉原則
1971 ワード
開閉の原則
定義:拡張に対して開放し、ソースコードの修正に対して閉鎖し、抽象でフレームワークを構築し、拡張の詳細を実現する.利点:システムの拡張性、利用性、メンテナンス性を高める.コア:抽象プログラミング向け、その他の設計原則の基礎
次に例1.抽象クラスICourseを作成する JavaCourseインプリメンテーション(implements)ICourseという抽象クラス を作成する
3 JavaCourseを機能拡張する必要がある場合、例えばこの授業で割引が必要な場合、コードを変更せずにそのサブクラスで機能を拡張すればよい.JavaDiscountCourseを作成してJavaCourseを継承する
4テストクラスTestMainを作成してテストします.
結果は次のとおりです.
カリキュラムID:96カリキュラム名称:Javaゼロからエンタープライズクラスの電子商取引開発カリキュラム原価:348.0カリキュラム割引価格:278.40000003元
定義:拡張に対して開放し、ソースコードの修正に対して閉鎖し、抽象でフレームワークを構築し、拡張の詳細を実現する.利点:システムの拡張性、利用性、メンテナンス性を高める.コア:抽象プログラミング向け、その他の設計原則の基礎
次に例1.抽象クラスICourseを作成する
package com.maomao.design.principle.openclose;
public interface ICourse {
Integer getId();
String getName();
Double getPrice();
}
package com.maomao.design.principle.openclose;
public class JavaCourse implements ICourse {
private Integer Id;
private String name;
private Double price;
public JavaCourse(Integer id, String name, Double price) {
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;
}
}
3 JavaCourseを機能拡張する必要がある場合、例えばこの授業で割引が必要な場合、コードを変更せずにそのサブクラスで機能を拡張すればよい.JavaDiscountCourseを作成してJavaCourseを継承する
package com.maomao.design.principle.openclose;
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;
}
}
4テストクラスTestMainを作成してテストします.
package com.maomao.design.principle.openclose;
public class MainTest {
public static void main(String[] args) {
ICourse iCourse = new JavaDiscountCourse(96, "Java ", 348d);
JavaDiscountCourse javaCourse = (JavaDiscountCourse) iCourse;
System.out.println(" ID:" + javaCourse.getId() + " :" + javaCourse.getName() + " :" + javaCourse.getPrice() + " :" + javaCourse.getDiscountPrice() + " ");
}
}
結果は次のとおりです.
カリキュラムID:96カリキュラム名称:Javaゼロからエンタープライズクラスの電子商取引開発カリキュラム原価:348.0カリキュラム割引価格:278.40000003元