美文网首页
设计原则

设计原则

作者: 小杨不是小羊 | 来源:发表于2023-05-29 14:15 被阅读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. 子类重载父类方法时入参应该更加宽泛,出参应该更加严格。

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

    合成复用原则

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

    相关文章

      网友评论

          本文标题:设计原则

          本文链接:https://www.haomeiwen.com/subject/nnsjedtx.html