设计模式学习——六大原则

Posted <天各一方>

tags:

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

文章目录

1.单一职责原则

  • 有且仅有一个原因引起类的变更。

    合理的职责分解,相同的职责放到一起,不同的职责分解到不同的接口和实现中去,这个是最容易也是最难运用的原则,关键还是要从业务出发,从需求出发,识别出同一种类型的职责

    单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责。

    比如说一个权限类,就只负责权限内的事情,不要去干涉登录或者角色相关的类,也不要把权限的事情放到其他类里面。否则,相关的代码分散在系统的各个地方,要维护的代码量过大,随着系统的扩张,维护的代码也会成几何增长。
    总结:控制粒度大小,将对象解耦,提高内聚性。

2.开闭原则

  • 模块、类和函数应该对扩展开放,对修改关闭。

    针对提供方,对扩展开放,针对调用方,对修改关闭。

    开闭原则是编程中最基础,最重要的设计原则,只要是面向对象编程,在开发时都会强调开闭原则

    开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的 工具和方法,而开闭原则才是其精神领袖。依照java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类

    一个软件实体的任何变更,不应该是建立在修改的基础上,而是应该对软件实体进行扩展来达到变更的目的。

    总结:对扩展开放,对修改关闭。

3.里氏替换原则

  • 派生类必须完全可替代其基类。

    里氏替换原则告诉我们,在软件中将一个基类对象替换成子类对象,程序将不会产生任何错误和异常。但是反过来就不行了,有子类出现的地方父类就未必能适应。

    里氏替换原则是实现开闭原则的重要方式之一。

    在运用里氏替换原则时,尽量把父类设计成抽象类或者接口,让子类继承父类或实现父接口,并实现父类声明的方法。运行时,子类实例替换父类实例。

4.接口隔离原则

  • 客户端不应该依赖于它不需要的接口

    如果接口隔离原则被破坏,客户端被迫依赖了它不需要的接口,代码就会变得紧密耦合,几乎不可能添加新功能。

    这要求我们将接口细化,尽量减少接口中的方法。
    总结:要为各个类建立他们需要专门的接口。

5.依赖倒置原则

  • 高级模块不应该依赖于低级模块,两者应该依赖于抽象。

  • 抽象不应该依赖与细节,细节应该依赖于抽象。

    举个例子:

    public class Java 
        public void say() 
            System.out.println("我用Java编程");
        
    
    
    public class Programmer 
        public void programming(Java java) 
            java.say();
        
    
    

    此时,我可以用Java语言编程,但如果我通过学习,掌握了Python,那我该如何扩展类?

    显然是很困难的。但是,如果我们遵从依赖倒置原则,将两者依赖于一个抽象,就会大大提高我们代码的扩展性。

    public interface Language 
        public void say();
    
    
    public class Java implements Language 
        @Override
        public void say() 
            System.out.println("我用Java编程");
        
    
    
    public class Python implements Language 
        @Override
        public void say() 
            System.out.println("我用Python编程");
        
    
    
    public class Programmer 
        public void programming(Language language) 
            language.say();
        
    
    

    总结:面向接口编程。

6.迪米特法则

  • 一个对象应该对其他对象尽可能少的了解,不和陌生人说话。

    又称最少知识原则。迪米特原则要求我们在设计系统的时候,要尽量减少两个对象之间的交互,如果两个对象之间不需要彼此之间的通信,那么两个对象就不应该发生任何的直接相互作用。

    如果需要调用一个对象的某一个方法,则可以通过第三者转发这个调用。简言之,添加一个第三者,减低现有对象的耦合度。

    书籍
    《Java设计模式及实践》

以上是关于设计模式学习——六大原则的主要内容,如果未能解决你的问题,请参考以下文章

2019.9.10 六大基本原则

学习设计模式 - 六大基本原则之里氏替换原则

学习设计模式 - 六大基本原则之依赖倒置原则

学习设计模式 - 六大基本原则之开闭原则

学习设计模式 - 六大基本原则之迪米特法则

面向对象六大原则