架构设计原则之开闭原则-OCP

架构设计原则之开闭原则

开闭原则-OCP

开闭原则定义

Software entities like classes, modules and functions should be open for extension but closed for modifications.

开闭原则(Open-Closed Principle, OCP) 指一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。

所谓开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性。

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化 ,而不是通过修改已有的代码来实现变化

开闭原则是面向对象设计中最基础的设计原则。

它指导我们如何建立稳定灵活的系统,例如版本更新,我们尽可能不修改源码,但是可以增加新功能。

实现开闭原则的核心思想就是面向抽象编程

我们来看一代代码,以课程为例:

  1. 首先创建一个课程接口ICourse
public interface ICourse{
          
       
    Integer getId();    
    String getName();    
    Double getPrice();
}
  1. 整个课程有Java架构,大数据等,我们先创建一个Java架构课程的类 JavaCourse
public class JavaCourse implements ICourse{
          
       
    private Integer id;    
    private String name;    
    private Duble price;    
    public JavaCourse(Integer id, String name, Double price){
          
           
        this.id = id;        
        this.name = name;        
        this.price = price;    
    }        
    //set、get 方法略
}
  1. 现在要给Java架构课程做活动,价格优惠。如果修改JavaCourse中的getPrice()方法,则会存在一定风险,可能影响其他地方的调用结果。如何在不修改原有代码的前提下,实现价格优惠这个功能呢?我们再写一个处理优惠逻辑的类——JavaDiscountCourse类(可以思考一下为什么要叫JavaDiscountCourse,而不叫DiscountCourse)
public class JavaDicountCourse extends JavaCourse{
          
       
    public JavaDiscountCourse(Integer id, String name, Double price){
          
           
        super(id, name, price);    
    }    
    public Double getOriginPrice(){
          
           
        return super.getPrice();    
    }    
    pubilic Double getPrice(){
          
           
        return super.getPrice() * 0.61;    
    }
}

最后,我们一起回顾一个类图

从类图中可以看出,JavaDiscountCourse中保留了覆盖JavaCourse的getPrice()方法,而不是直接修改JavaCourse类

经验分享 程序员 微信小程序 职场和发展