ソフトウェア設計の七大原則の一つである開閉原則

1971 ワード

開閉の原則
定義:拡張に対して開放し、ソースコードの修正に対して閉鎖し、抽象でフレームワークを構築し、拡張の詳細を実現する.利点:システムの拡張性、利用性、メンテナンス性を高める.コア:抽象プログラミング向け、その他の設計原則の基礎
次に例1.抽象クラスICourseを作成する
package com.maomao.design.principle.openclose;

public interface ICourse {

    Integer getId();

    String getName();

    Double getPrice();

}
  • JavaCourseインプリメンテーション(implements)ICourseという抽象クラス
     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元