美文网首页Java工作知识
设计原则:开闭原则

设计原则:开闭原则

作者: 谁家的猪 | 来源:发表于2019-07-07 14:19 被阅读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

相关文章

  • 面向对象设计原则(二)开闭原则

    面向对象设计原则之开闭原则 开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。 开闭原则的...

  • OOP程序设计规则

    开闭原则(Open-Closed Principle,OCP) 开闭原则是这七大设计原则中最常见、最基本的开闭原则...

  • 开闭原则

    个人博客原文:开闭原则 设计模式六大原则之六:开闭原则。 简介 姓名 :开闭原则 英文名 :Open Closed...

  • 设计模式分类以及设计模式原则

    设计模式原则 设计模式原则 开闭原则(Open Closed Principle,OCP) 里氏代换原则(Lisk...

  • 六大设计原则 - 开闭原则【Open Close Princip

    六大设计原则 单一职责原则 里式替换原则 依赖倒置原则 接口隔离原则 迪米特原则 开闭原则 开闭原则 定义: So...

  • 从一个例子看开闭原则

    什么开闭原则? 开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们...

  • iOS开闭原则和替换原则

    什么叫开闭原则? 六大模式设计原则之一的开闭原则是比较重要的,开闭原则其实就是“抽象构建框架,实现扩展细节...

  • 设计原则-开闭原则

    开闭原则(OCP) 开闭原则的定义 开闭原则是java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系...

  • 设计模式的设计原则

    设计模式的设计原则 面向对象五大设计原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 开闭原则 设计模...

  • python和设计模式17

    Open–closed principle 开闭原则 OCP 开闭原则指的是对扩展开发,对修改关闭。 在设计原则中...

网友评论

    本文标题:设计原则:开闭原则

    本文链接:https://www.haomeiwen.com/subject/wtqbhctx.html