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

一、开闭原则定义

开闭原则(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;
        }
    }
    
  • 为了不影响原来的价格,对打折的价格除进行了单独额处理,总体类图如下

posted @ 2020-02-28 21:58  李维维(levi)  阅读(744)  评论(0编辑  收藏  举报