码迷,mamicode.com
首页 > 其他好文 > 详细

软件设计七大原则

时间:2019-04-08 15:18:27      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:方法   适应   模块   xtend   构建   一个   重新定义   实体   方式   

## 一、简介

 

## 二、开闭原则讲解

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

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

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

 

 

 

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

 

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

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

## 六、迪米特法则讲解

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

## 八、里氏替换原则

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

软件设计七大原则

标签:方法   适应   模块   xtend   构建   一个   重新定义   实体   方式   

原文地址:https://www.cnblogs.com/ch-forever/p/10670468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!