软件设计七大原则

Posted ch-forever

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件设计七大原则相关的知识,希望对你有一定的参考价值。

## 一、简介

 

## 二、开闭原则讲解

> 定义:一个软件实体如类、模块、和函数应该对外扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。

下面我们通过实际编码来理解,

(1)类的关系图

技术图片

 

ICourse接口:

public interface ICourse {

    Integer getId();
    String getName();
    Double getPrice();
}

 

 

JavaCourse类实现ICourse接口:

public class JavaCourse implements ICourse{

    Integer id;
    String name;
    Double price;

    public JavaCourse(Integer id, String name, Double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public Integer getId() {
        return this.id;
    }

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

    @Override
    public Double getPrice() {
        return this.price;
    }

    @Override
    public String toString() {
        return "JavaCourse{" +
                "id=" + id +
                ", name=‘" + name + ‘‘‘ +
                ", price=" + price +
                ‘}‘;
    }
}

 

 

此时,我们的增加一个需求,对课程价格进行打折。如果我们在ICourse接口中重新定义一个方法,用于获取折扣价格,那么我们在JavaCourse类中也同样要对新增的方法进行实现。

ICourse接口,增加getDiscountPricej抽象方法:

public interface ICourse {

    Integer getId();
    String getName();
    Double getPrice();
    Double getDiscountPrice();
}

 

 

JavaCourse类实现getDiscountPrice方法:

public class JavaDiscountCourse extends JavaCourse {

    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }
    
    public Double getDiscountPrice(){
        return super.getPrice()*0.8;
    }
}

 

由上述思想我们知道,接口的实现需要更改,这样对于后期的维护以及安全等都是会带来很大的影响的。若是,不同课程的折扣方式不一样呢?这种方式还适应吗?

我们通过新建一个JavaDiscountCourse类继承JavaCourse类,来进行扩展。

public class JavaDiscountCourse extends JavaCourse {

    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }
  // 获取课程原始价格
    public Double getOriginPrice(){
        return this.price;
    }
    public Double getDiscountPrice(){
        return super.getPrice()*0.8;
    }

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

 

 

 

## 三、依赖倒置原则讲解

 

## 四、单一职责原则讲解

## 五、接口隔离原则讲解

## 六、迪米特法则讲解

## 七、里氏替换原则讲解

## 八、里氏替换原则

## 九、合成复用原则讲解

以上是关于软件设计七大原则的主要内容,如果未能解决你的问题,请参考以下文章

设计模式软件设计七大原则 ( 依赖倒置原则 | 代码示例 )

设计模式软件设计七大原则 ( 接口隔离原则 | 代码示例 )

设计模式软件设计七大原则 ( 迪米特原则 | 代码示例 )

设计模式软件设计的七大原则

设计模式软件设计七大原则 ( 开闭原则 )

软件架构设计的七大原则