zoukankan      html  css  js  c++  java
  • 设计模式-软件设计原则1-开闭原则

    1.开闭原则

    开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间,规定每天工作8 小时。意思就是说,对于每天工作8小时这个规定是关闭的,但是你什么时候来,什么时候走是开放的。早来早走,晚来晚走。以课程体系为例,首先创建一个课程接口ICourse

     1 package com.lch.test.course;
     2 
     3 /**
     4  * 课程接口
     5  */
     6 public interface ICourse {
     7     Integer getId();
     8     String getName();
     9     Double getPrice();
    10 }

    整个课程生态有Java架构、大数据、人工智能、前端、软件测试等,我们来创建一个Java架构课程的类JavaCourse

    package com.lch.test.course;
    
    /**
     * java 课程
     */
    public class JavaCourse implements ICourse {
    
        private Integer id;
        private String name;
        private Double price;
    
        public JavaCourse(Integer id, String name, Double price) {
            this.id = id;
            this.name = name;
            this.price = price;
        }
    
        public JavaCourse() {
        }
    
        @Override
        public Integer getId() {
            return id;
        }
    
        @Override
        public String getName() {
            return name;
        }
    
        @Override
        public Double getPrice() {
            return price;
        }
    }

    现在我们要给 Java架构课程做活动,价格优惠。如果修改 JavaCourse 中的 getPrice()方法,则会存在一定的风险,可能影响其他地方的调用结果。我们如何在不修改原有代码前提前下,实现价格优惠这个功能呢?现在,我们再写一个处理优惠逻辑的类,JavaDiscountCourse 类

     1 package com.lch.test.course;
     2 
     3 /**
     4  * java课程优惠活动类
     5  */
     6 public class JavaDiscountCourse extends JavaCourse {
     7     public JavaDiscountCourse(Integer id, String name, Double price) {
     8         super(id, name, price);
     9     }
    10 
    11     public Double getOriginPrice() {
    12         return super.getPrice();
    13     }
    14 
    15     public Double getPrice() {
    16         return super.getPrice() * 0.6;
    17     }
    18 
    19 }

    测试类

    1 package com.lch.test.course;
    2 
    3 public class CourseTest {
    4     public static void main(String[] args) {
    5         JavaDiscountCourse discountCourse = new JavaDiscountCourse(1,"jack",600D);
    6         System.out.println("课程原价:" + discountCourse.getOriginPrice());
    7         System.out.println("优惠价格:" + discountCourse.getPrice());
    8     }
    9 }

    UML类图如下:

  • 相关阅读:
    R语言 单变量重命名与删除
    R语言 查看函数源代码
    R语言 for循环之break,next
    ROC & AUC笔记
    rmarkdown教程
    github教程
    logistic regression与SVM
    sql语句,order by
    将权重加载到不同的结构(有一些共同层)
    人脸识别数据集
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/10542894.html
Copyright © 2011-2022 走看看