• 代码设计原则(一) 开闭原则


    开闭原则(Open-Closed Principle,OCP)

    一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实 现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原 则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增 加新功能。

    • 一个课程系统里面,有不同的课程,课程有统一的行为,获得课程的id,名称,价格,定义一个抽象接口ICourse:

      public interface ICourse {
          Long getId();
          BigDecimal getPrice();
          String getName();
      }
      
    • java课程继承了ICourse,内部实现相关的方法,如果有其他的课程,也这样实现

      public class JavaClass implements  ICourse {
      
          private Long id ;
          private BigDecimal price;
          private String name;
      
          public JavaClass(Long id, BigDecimal price, String name) {
              this.id = id;
              this.price = price;
              this.name = name;
          }
      
          @Override
          public Long getId() {
              return id;
          }
      
          @Override
          public BigDecimal getPrice() {
              return price;
          }
      
          @Override
          public String getName() {
              return name;
          }
      }
      
    • 我们要对课程进行打折,不同课程的打折力度不一样,有的课程不打折,所以不能改变ICourse的接口,在实现类中进行价格的计算:

      public class JavaDsicountClass extends JavaClass {
      
          public JavaDsicountClass(Long id, BigDecimal price, String name) {
              super(id, price, name);
          }
      
          public  BigDecimal getDiscountPrice(){
              BigDecimal price = this.getPrice();
              //高精度计算使用BigDecimal内部运算的方法
              BigDecimal discountPrice = price.multiply(BigDecimal.valueOf(0.6));
              return discountPrice;
          }
      }
      
    • 为了不影响原来的价格,对打折的价格除进行了单独额处理,总体类图如下

  • 相关阅读:
    [设计模式]C++实现单例
    JMeter基本使用
    Dev TextEdit限制只输入数字
    sql优化方式
    MySql中的索引
    SQL索引的概念
    mysql sql语句大全
    bandedGridView定位尾行(GridView通用)
    GridView中的下拉框赋值
    使得 XtraEditors.TextEdit 失去焦点(LostFocus)的方法
  • 原文地址:https://www.cnblogs.com/zf-blog/p/13432348.html
Copyright © 2020-2023  润新知