zoukankan      html  css  js  c++  java
  • 00_1面向对象设计原则-开闭原则

    开闭原则:是指一个软件实体(如类、模块和函数)应该对扩展开放,对修改关闭。所有的开闭,也正是对扩展和修改两个行为的一个原则。

    下面我们来看一下例子,我们以课程为例:

    定义课程接口:ICourse.java

    package org.itzn.inter;
    public interface ICourse {
        Integer getId();
        String getName();
        Double getPrice();
    }

    课程有java高级软件开发、python、AI、前端开发,我们先来创建一个java类,JavaCourse.java

    package org.itzn.impl;
    
    
    import org.itzn.inter.ICourse;
    
    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 Integer getId() {
            return this.getId();
        }
    
        public String getName() {
            return this.getName();
        }
    
        public Double getPrice() {
            return this.price;
        }
    }

    测试:MyTest .java

    package org.itzn.test;
    
    import org.itzn.impl.JavaCourse;
    import org.itzn.impl.JavaDiscountCourse;
    
    public class MyTest {
        public static void main(String[] args) {
    
            JavaCourse javaCourse = new JavaCourse(1, "java oop", 50.0);
            System.out.println(javaCourse.getPrice());
        }
    }

    结果:50.0

    现在需求来了,我们要给java高级软件开发课程做优惠活动。这时如果我们修改JavaCourse中的getPrice()方法,则存在一定的风险,可能会影响其他地方的调用结果。考虑一下,我们怎样才能不修改原有的代码的前提下,实现优惠活动呢?我们看看下面的写法:

    定义JavaDiscountCourse.java

    package org.itzn.impl;
    
    public class JavaDiscountCourse extends JavaCourse {
    
        public JavaDiscountCourse(Integer id, String name, Double price) {
            super(id, name, price);
        }
    
        public Double getOriginPrice() {
            return super.getPrice();
        }
    
        public Double getPrice() {
            return super.getPrice() * 0.65;
        }
    }

    测试类:

    package org.itzn.test;
    
    import org.itzn.impl.JavaCourse;
    import org.itzn.impl.JavaDiscountCourse;
    
    public class MyTest {
        public static void main(String[] args) {
    
            JavaCourse javaCourse = new JavaCourse(1, "java oop", 50.0);
            System.out.println(javaCourse.getPrice());
    
            JavaDiscountCourse javaDiscountCourse = new JavaDiscountCourse(1, "java oop", 50.0);
            System.out.println(javaDiscountCourse.getPrice());
        }
    }

    结果:50.0

    32.5

  • 相关阅读:
    Centos7防火墙
    MySql按日期进行统计
    MySQL配置文件详解
    MySQL查看和修改表的存储引擎
    计算文件词频
    MapReduce寻找共同好友
    Centos 7 安装 memcached
    Linux常用命令(二)--文件目录命令
    Linux常用命令(一)--系统命令
    python学习笔记:(八)条件语句
  • 原文地址:https://www.cnblogs.com/itmu89/p/12168977.html
Copyright © 2011-2022 走看看