架构设计原则之开闭原则-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类

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值