定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
用抽象构建框架,用实现扩展细节
优点:提高软件系统的可用性及可维护性
示例
实现一个输出课程信息的功能
目录结构
目录结构.png代码实现
- 创建ICourse接口,实现如下方法
/**
* @author lijiayin
*/
public interface ICourse {
Integer getId();
String getName();
double getPrice();
}
- 创建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;
}
}
- 创建测试类进行测试
/**
* @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());
}
}
-
测试结果
测试结果.png
课程可以打8折,请输出原始价格和打折后价格
可以在接口上新增方法,但是改动比较大。选择新增一个类,继承JavaCourse。
目录结构
目录结构.png代码实现
- 创建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;
}
}
- 修改测试类,进行测试
/**
* @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());
}
}
-
测试结果
测试结果.png -
UML图
UML.png
网友评论