一、开闭原则

开闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭

总结:用抽象构建框架,用实现扩展细节

优点:提高软件系统的可复用性及可维护性

假设场景一:接口A里面定义了一个书本的基本信息,但是具体是什么书我们暂时不知道,用抽象来构建框架

代码实现:

1.定义接口–Ibook用接口来抽象定义一本书的大概信息

public interface Ibook {
    Integer getId();
    String getName();
    Double getPrice();
}

2.接口实现-根据自己的要求来完善具体细节,但是无法改变下层接口架构

public class JavaBook implements Ibook {
    private Integer Id;
    private String name;
    private Double price;

    public JavaBook(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;
    }	
}

3.调用测试

    Ibook ibook = new JavaBook(1,"java从入门到精通",48.00);
        System.out.println("课程ID:" + ibook.getId() + " 课程名称:" + ibook.getName() + " 课程原价:" + ibook.getPrice() );

假设场景二:此时某一本书不仅要显示其价格,更因为赶上什么活动其书本要进行打折活动,所有书本一律八折,这时要显示的就不是书本的原价了

    public Double getPrice() {
        return this.price*0.8;
    }

​ 如上可显示折后价格,但是boss又提需求了说你只显示打折后的价格,买家怎么知道原价,不知道原价怎么知道自己赶上活动了呢?

解决方案一:在接口再定义一个打折的处理函数,那么就需要考虑此接口如果有多个实现类那么所有实现类都需要添加这个方法,有的书本不在活动中的话就会产生多余函数

​ 结论:1.所有实现类都需要实现

​ 2.有的书本可能不在本次打折活动中

​ 3.需要考虑活动过后是否有存在的必要

解决方案二:在具体的实现类中扩展一个打折计算函数。在JavaBook中添加折后函数

 public Double getDiscountPrice(){
        return super.getPrice()*0.8;
    }

​ 结论:这样也是修改了其原始类结构

解决方案三:对其实现类进行扩展

public class JavaDiscountBook extends JavaBook{

    public JavaDiscountBook(Integer id, String name, Double price){
        super(id,name,price);
    }

    public Double getDiscountPrice(){
        return super.getPrice()*0.8;
    }
}

调用测试,额外扩展,不修改任何基础上实现,活动过后可舍弃不对原有系统框架有任何影响

public class MainTest {
    public static void main(String[] args) {
        IBook ibook = new JavaDiscountBook(1,"java从入门到精通",48.00);
        JavaDiscountBook jdBook = (JavaDiscountBook) ibook;
        System.out.println("课程ID:" + jdBook.getId() + " 课程名称:" + jdBook.getName() + " 课程原价:" + jdBook.getPrice()+ " 课程折后价格:" + jdBook.getDiscountPrice() + "元" );
    }
}

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭

总结:用抽象构建框架,用实现扩展细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值