1_开闭原则(Open Closed Principle)

开闭原则(Open Closed Principle)

1.概念

开闭原则(Open-Closed Principle)是指一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭 。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节

2.案例演示与讲解

创建一个课程接口
java 复制代码
public interface ICourse {
    Integer getId();
    String getName();
    Double getPrice();
}
创建一个课程的具体实现类
java 复制代码
public class Course 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.id;
    }

    public String getName() {
        return this.name;
    }

    public Double getPrice() {
        return this.price;
    }
}
创建一个课程具体细节类(Java课程实现)来实现逻辑处理
java 复制代码
public class JavaDiscountCourse extends Course {
    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }
    //假设双12活动,java课程打6折优惠逻辑处理
    public Double getDiscountPrice(){
        return super.getPrice() * 0.6;
    }
}

public class VueDiscountCourse extends Course {
    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }
    //假设双12活动,vue课程打7折优惠逻辑处理
    public Double getDiscountPrice(){
        return super.getPrice() * 0.7;
    }
}
调用类实现功能
java 复制代码
public class OpenCloseTest {
    public static void main(String[] args) {
        //创建一个java课程
        ICourse iCourse = new JavaDiscountCourse(1,"Java架构",11800D);
        JavaDiscountCourse discountCourse = (JavaDiscountCourse)iCourse;
        System.out.println(
            "课程ID:" + discountCourse.getId() + 
            "\n课程标题:《" +  discountCourse.getName() + "》" 
            +"\n原价:" + discountCourse.getPrice() 
            + "\n售价:" + discountCourse.getDiscountPrice()
        );
        
        //创建一个vue课程
        ICourse iCourse = new VueDiscountCourse(1,"vue课程",11800D);
        VueDiscountCourse discountCourse = (VueDiscountCourse)iCourse;
        System.out.println(
            "课程ID:" + discountCourse.getId() + 
            "\n课程标题:《" +  discountCourse.getName() + "》" 
            +"\n原价:" + discountCourse.getPrice() 
            + "\n售价:" + discountCourse.getDiscountPrice()
        );
    }
}

执行结果:

3.开闭原则类图:

4.开闭原则类图概念理解

创建一个接口和实现中抽象方法和实现 ,保持结构不变关闭的修改

如果我们对实现类中的功能不满足,可以创建一个类继承实现类 来扩展功能满足需要,应该对扩展开放

java 代码实现

java 复制代码
public interface  Book{
    public String getName();//获取书名
    public double getPrice(); //获取价格
}
public class BookeImp implements Book {
    @Override
    public String getName() {
        return "书";
    }

    @Override
    public double getPrice() {
        return 10.0;
    }
}
public class JavaBook extends  BookeImp {
    public String getName() {
        return "Java书";
    }
    public double getPrice() {
        return 100.0;
    }
}
public class Use {
    public static void main(String[] args) {
        //需求打印通用书名和价格
        Booke book = new BookeImp();
        System.out.println(book.getName());
        System.out.println(book.getPrice());
        //修改需求打印java书名和价格,保持原有抽象类和现实的结构修改关闭,扩展新的需求功能
        Booke javaBook = new JavaBook();
        System.out.println(javaBook.getName());
        System.out.println(javaBook.getPrice());
    }
}
相关推荐
蜡笔小新..8 小时前
【设计模式】软件设计原则——开闭原则&里氏替换&单一职责
java·设计模式·开闭原则·单一职责原则
niech_cn7 天前
超详细超实用!!!AI编程之cursor编写设计模式开闭原则实例(四)
设计模式·ai编程·开闭原则
丶白泽15 天前
重修设计模式-设计原则
设计模式·接口隔离原则·依赖倒置原则·开闭原则
蔚一21 天前
Java设计模式—面向对象设计原则(一) ----->开闭原则OCP(完整详解,附有代码+案例)
java·后端·设计模式·intellij-idea·开闭原则
MogulNemenis1 个月前
符合开闭原则的设计模式
设计模式·bash·开闭原则
要记得喝水1 个月前
软件设计原则之开闭原则
windows·c#·.net·visual studio·开闭原则
认真的小羽❅1 个月前
设计模式 -- 七大原则(五)-- 开闭原则
设计模式·开闭原则
海的宇宙2 个月前
C#:具体类=>抽象类=>接口的变化过程详解
开发语言·面试·c#·抽象工厂模式·接口隔离原则·开闭原则
A22743 个月前
零——七大设计原则
接口隔离原则·依赖倒置原则·里氏替换原则·开闭原则·迪米特法则·合成复用原则·单一职责原则
一大颗萝卜3 个月前
【原创实现 设计模式】Spring+策略+模版+工厂模式去掉if-else,实现开闭原则,优雅扩展
java·spring·设计模式·简单工厂模式·策略模式·模板方法模式·开闭原则