zoukankan      html  css  js  c++  java
  • 深入理解面向对象——六大基本原则

    这六大原则任何面向对象的语言都应该遵守的,要想让你的代码易扩展高服用就尽量去满足这六大原则吧,不一定严格按照某种设计模式,但是如果你的代码符合这六大原则,那么你的代码就是好代码了,好的代码不一定是严格按照设计模式写的代码。

    单一职责原则(SRP)

    Single Responsibility Principle,单一职责原则。

    定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

    优点:

    • 可以降低类的复杂度,一个类只负责一项职责,逻辑简单;
    • 提高类的可读性,提高系统的可维护性;
    • 变更引起的风险降低,变更是必然的。

    SRP其实也蕴含着深沉的人生智慧——任何事情要想做好就必须要专心致志地做。

    里氏替换原则(LSP)

    Liskov Substituition Principle,里氏替换原则。

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

    当使用继承时,遵循里氏替换原则。子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法,也尽量不要重载父类的方法。

    依赖倒置原则(DIP)

    Dependence Inversion Principle,依赖倒置原则。

    定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

    例如,业务逻辑层相对于数据层是高层模块,因为业务逻辑层需要调用数据层去连接数据库,但是要做到可扩展高复用,尽量不要让业务逻辑层依赖数据层(如数据库类型mysql,pgsql),可以在数据层抽象出一个接口(如pdo),让业务逻辑层依赖于这个抽象接口(统一操作数据库方法名)。

    示例:

    interface DB{
        public function connect();
        public function add();
        public function update();
        public function query();
        public function del();
    }
    
    class Mysql implements DB{
    
    }
    
    class Sqlite implements DB{
    
    }
    

    开放封闭原则(OCP)

    Open-Close Principle,开-闭原则。

    定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

    场景:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

    建议:当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

    接口隔离原则(ISP)

    Interface Segregation Principle,接口隔离原则。

    定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

    注意:

    • 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性 是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
    • 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
    • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

    迪米特法则(LKP)

    Law of Demeter or Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则。这个原则首次在Demeter系统中得到正式运用,所以定义为迪米特法则。它讲的是"一个对象应当尽可能少的去了解其他对象"。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。

    定义:一个对象应该对其他对象保持最少的了解。

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

    简单的理解就是高内聚,一个类尽量减少对其他对象的依赖,并且这个类的方法和属性能用私有的就尽量私有化。

    注意:

    • 只与直接的朋友通信,不要和陌生人说话。
    • 过分的使用该原则,将导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。

    参考:
    PHP设计模式——六大原则 - 姜海强 - 博客频道 - CSDN.NET
    http://blog.csdn.net/jhq0113/article/details/44907029

  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/52fhy/p/5512989.html
Copyright © 2011-2022 走看看