Java工作知识

设计原则:开闭原则

2019-07-07  本文已影响3人  谁家的猪

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
用抽象构建框架,用实现扩展细节
优点:提高软件系统的可用性及可维护性

示例

实现一个输出课程信息的功能

目录结构

目录结构.png

代码实现

  1. 创建ICourse接口,实现如下方法
/**
 * @author lijiayin
 */
public interface ICourse {
    
    Integer getId();
    String getName();
    double getPrice();
}
  1. 创建JavaCourse类,实现输出Java课程信息
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

/**
 * @author lijiayin
 */
@NoArgsConstructor
@AllArgsConstructor
public class JavaCourse implements ICourse {
    
    private Integer id;
    
    private String name;
    
    private double price;
    
    
    
    @Override
    public Integer getId() {
        return this.id;
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public double getPrice() {
        return this.price;
    }
}
  1. 创建测试类进行测试
/**
 * @author lijiayin
 */
public class Test {
    public static void main(String[] args) {
        ICourse iCourse = new JavaCourse(1, "Java开发课程", 299);
        System.out.println("课程id:" + iCourse.getId() + 
                ",课程名称:" + iCourse.getName() + 
                ",课程价格:" + iCourse.getPrice());
    }
}
  1. 测试结果


    测试结果.png

课程可以打8折,请输出原始价格和打折后价格

可以在接口上新增方法,但是改动比较大。选择新增一个类,继承JavaCourse。

目录结构

目录结构.png

代码实现

  1. 创建JavaDiscountCourse类,实现打折
/**
 * @author lijiayin
 */
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;
    }
}
  1. 修改测试类,进行测试
/**
 * @author lijiayin
 */
public class Test {
    public static void main(String[] args) {
        ICourse iCourse = new JavaDiscountCourse(1, "Java开发课程", 299);
        JavaDiscountCourse course = (JavaDiscountCourse) iCourse; 
        System.out.println("课程id:" + course.getId() + 
                ",课程名称:" + course.getName() + 
                ",课程原始价格:" + course.getPrice() + 
                ",课程折后价格:" + course.getDisCountPrice());
    }
}
  1. 测试结果


    测试结果.png
  2. UML图


    UML.png
上一篇 下一篇

猜你喜欢

热点阅读