设计原则

2023-05-29  本文已影响0人  小杨不是小羊

开闭原则

程序应该对修改关闭,对拓展开放。
例如中文是姓在前名在后,英文则反之。
下面的例子在不修改原有XiaoMing类时拓展了其功能。

public interface Person{
    String getName()
}
public class XiaoMing implements Person{
    public String getName(){
        return "小明";
    }
}
public class MingXiao extends XiaoMing{
    public String getEnglishName(){
        return "明小";
    }
}

依赖倒置原则

高层模块不应该依赖低层模块,两者都应该依赖其抽象。
抽象不应该依赖细节,细节应该依赖抽象。

public class XiaoMing{
    //这样不好 如果日后要学其他课程就要修改XiaoMing类
    public void studyEnglish(){
        //studyEnglish
    }
}
修改后
public interface Course{
    void study();
}
public class EnglishCourse implements Course{
    public void study(){
        //studyEnglish
    }
}
public class MathCourse implements Course{
    public void study(){
        //studyMath
    }
}

public class XiaoMing{
    //这样不好 如果日后要学其他课程就要修改XiaoMing类
    public void study(Course course){
        //可以学习任意课程 而不用修改XiaoMing类
        course.study();
    }
}

单一职责原则

不要存在多于一个导致类修改的原因。
每个类、方法、接口都应该只有一个职责。避免多个职责相互影响。

接口隔离原则

类不应该依赖它不需要的接口。
应该设计多个专用的接口,而不是单一的总接口。

迪米特原则(最少知道)

一个对象应该对其他对象保持最少的了解。
不应该引入其可以不使用的成员。如果有“人”帮我统计账单,我只需要账单统计项那么我不应该引入账单,可由统计者汇报。

里氏替换原则

子类可拓展父类的功能但不能修改父类功能。
在任何引用其父类的地方都应该能替换成子类并保证逻辑不变。

  1. 子类可以有自己特有方法
  2. 子类不应该覆盖(重写)父类的非抽象方法。
  3. 子类重载父类方法时入参应该更加宽泛,出参应该更加严格。

里氏替换原则我理解的也不是很好,但觉得是有用的,先遵循再在实践中检验。

合成复用原则

组合、聚合有限继承。
优先使用组合、聚合能够降低类之间的耦合度,降低类的使用难度。组合、聚合的关系是拿来就用不关心实现细节,继承则需要考虑父类功能的影响。

上一篇下一篇

猜你喜欢

热点阅读