美文网首页
设计模式之六大原则

设计模式之六大原则

作者: Leonzai | 来源:发表于2018-04-08 10:16 被阅读10次

    1. 单一职责

    一个类应当只负有单一的职责。

    为什么?因为如果类负有了两个职责,那么其中一个职责变化很有可能会影响另一个职责的正常运行,并且会影响类的复用等一系列的问题。 
    
    反例:A 类功能含有链接数据库,查询员工。
    
    方案:上面 A 类两个职责分别建立一个类:数据库操作类、员工操作类。
    

    2. 开闭原则

    即软件实体应尽量在不修改原有代码的情况下进行扩展。

    反例:功能是显示各种类型的图表,如饼状图和柱状图等。
    实现:有显示图表类 ChartDisplay ,饼图类 PieChart ,柱图类 BarChart 。
    在 ChartDisplay 的 display 方法中,根据类型判断调用 PieChart 类的 display 还是 BarChart 的 display。
    下次如果多了折线图类,那么就需要在 ChartDisplay 中添加代码判断是否是折线图类去调用折线图类的 Display,这样就破坏了开闭原则。
    
    方案:方法不止一种,就 php 而言,可以使用静态绑定。其他的可以使用依赖注入模式。
    

    3. 里氏替换原则

    子类可以扩展父类的功能,但不能改变父类原有的功能。

    子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    子类中可以增加自己特有的方法。
    当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
    当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
    

    4. 依赖倒置

    高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
    面向接口编程。

    业务逻辑层相对于数据层是高层模块,尽量不要让业务逻辑层依赖数据层, 
    可以在数据层抽象出一个接口,让业务逻辑层依赖于这个抽象接口。 
    
    反例:子类依赖低层类 A,有一天需要修改成子类依赖低层类 B,这时候就要修改大量代码。 
    
    方案:低层类 A 抽象出一个接口。让子类去依赖这个接口。以后要依赖低层类 B,只要 B 实现这个接口即可满足。
    

    5. 接口隔离

    顾名思义,接口需要隔离,为什么需要隔离,因为我们要将臃肿的接口拆分成最小接口。
    如果不是最小接口,就需要去实现他们不需要的接口。

    6. 最少知道

    类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

    相关文章

      网友评论

          本文标题:设计模式之六大原则

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