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());
    }
}
相关推荐
计算机安禾13 天前
【c++面向对象编程】第37篇:面向对象设计原则(一):单一职责与开闭原则
开发语言·c++·开闭原则
S1998_1997111609•X22 天前
Phash的系统通信工程及恶意注入污染蜜罐轮替探测阻断正常通讯协议系统的dog 通用原理及行为阻击至联合国管理清理全栈
安全·百度·哈希算法·量子计算·开闭原则
S1998_1997111609•X24 天前
哈希树函数洪水泛滥污染孪生镜像导致生物量子信息泄露以钩子而爬虫植入ssd探测
爬虫·网络协议·缓存·哈希算法·开闭原则
S1998_1997111609•X25 天前
电容〇解临界过流恶意注入污染寄生的边缘锯齿噪声污染孪生
安全·百度·哈希算法·量子计算·开闭原则
S1998_1997111609•X25 天前
恶意烧录级系统固件开源á进行函数值哈希泛滥污染孪生以钩子而爬虫合规系统的性能指标体系技术应用内存
安全·百度·哈希算法·量子计算·开闭原则
S1998_1997111609•X1 个月前
元组件HCG&&单元量泄露数据爬虫植入syatem,造成系统ioc dark and agent of China gov 的犯罪心理学依据行为
网络协议·安全·百度·哈希算法·开闭原则
S1998_1997111609•X1 个月前
论述情况盀导致系统应用通信通讯协议被恶意注入污染蜜罐开元盀用于非法侵入爬虫植入ssd的通用技术原理
网络·网络协议·百度·哈希算法·开闭原则
S1998_1997111609•X1 个月前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则
S1998_1997111609•X1 个月前
恶意注入污染蜜罐HDMI进程函数值进行封禁垃圾蠕虫仓蟲的轮系依据行为戆直㞢仓shell token
数据库·爬虫·网络协议·百度·开闭原则
S1998_1997111609•X1 个月前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则