1、开闭原则

1.1、定义

一个软件实体如类、模块和函数应该`对扩展开放,对修改关闭`。用抽象构建框架,用实现扩展细节。优点:提高软件系统的可复用性以及可维护性

1.2、代码演示

public interface ICourse {    Integer getId();    String getName();    Double getPrice();}
public class JavaCourse 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;    }}
// 如果需要在原有功能基础上添加一个获取打折价格的功能,开闭原则建议不要修改原有接口,这里可以继承原有JavaCourse类,// 在原有功能之上扩展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;    }}

2、开闭原则

2.1、定义

`高层模块不应该依赖低层模块`,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。针对接口编程,不要针对实现编程。优点:可以减少类之间的耦合性,提高系统的稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。

2.2、代码演示

public interface ICourse {    void studyCourse();}public class JavaCourse implements ICourse {    @Override    public void studyCourse() {        System.out.println("Geely在学习Java课程");    }}public class PythonCourse implements ICourse {    @Override    public void studyCourse() {        System.out.println("Geely在学习Python课程");    }}
public class Geely {    public void setiCourse(ICourse iCourse) {        this.iCourse = iCourse;    }    private ICourse iCourse;    public void studyImoocCourse() {        iCourse.studyCourse();    }}
public class Test {    public static void main(String[] args) {        Geely geely = new Geely();        geely.setiCourse(new JavaCourse());        geely.studyImoocCourse();        geely.setiCourse(new FECourse());        geely.studyImoocCourse();    }}

3、单一职责原则

3.1、定义

不要存在多于一个导致类变更的原因。一个类/接口/方法只负责一项职责。优点:降低类的复杂度、提高类的可读性、提高系统的可维护性、降低变更引起的风险。

3.2、代码演示

// 不推荐的写法public class Bird {    public void mainMoveMode(String birdName){                if("鸵鸟".equals(birdName)){            System.out.println(birdName+"用脚走");        }else{            System.out.println(birdName+"用翅膀飞");        }    }}
public class FlyBird {    public void mainMoveMode(String birdName){        System.out.println(birdName+"用翅膀飞");    }}public class WalkBird {    public void mainMoveMode(String birdName){        System.out.println(birdName+"用脚走");    }}
public class Test {    public static void main(String[] args) {        // 不推荐写法        Bird bird = new Bird();        bird.mainMoveMode("大雁");        bird.mainMoveMode("鸵鸟");        // 推荐写法,功能单一        FlyBird flyBird = new FlyBird();        flyBird.mainMoveMode("大雁");        WalkBird walkBird = new WalkBird();        walkBird.mainMoveMode("鸵鸟");    }}

4、单一职责原则

4.1、定义

用多个专门的接口,而不使用单一的总接口。客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。建立单一接口,不要建立庞大臃肿的接口。`尽量细化接口,接口中的方法尽量少`。适度原则,一定要适度。优点:符合我们常说的高内聚低耦合的设计思想,

4.2、代码演示