zoukankan      html  css  js  c++  java
  • 极客时间-设计模式之美笔记(5) 设计原则-理论

    理论一:对于单一职责原则,如何判定某个类的职责是否够“单一”?

    1. 如何理解单一职责原则(SRP)?

      一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。

    2. 如何判断类的职责是否足够单一?

      不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责是否单一,可能会有不同的判定结果。实际上,一些侧面的判断指标更具有指导意义和可执行性,比如,出现下面这些情况就有可能说明这类的设计不满足单一职责原则:

    • 类中的代码行数、函数或者属性过多;
    • 类依赖的其他类过多,或者依赖类的其他类过多;
    • 私有方法过多;比较难给类起一个合适的名字;
    • 类中大量的方法都是集中操作类中的某几个属性。

    3. 类的职责是否设计得越单一越好?

      单一职责原则通过避免设计大而全的类,避免将不相关的功能耦合在一起,来提高类的内聚性。同时,类职责单一,类依赖的和被依赖的其他类也会变少,减少了代码的耦合性,以此来实现代码的高内聚、低耦合。但是,如果拆分得过细,实际上会适得其反,反倒会降低内聚性,也会影响代码的可维护性。

    理论二:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?

    1. 如何理解“对扩展开放、对修改关闭”?

      添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。关于定义,我们有两点要注意。

    第一点是,开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发。

    第二点是,同样的代码改动,在粗代码粒度下,可能被认定为“修改”;在细代码粒度下,可能又被认定为“扩展”。

    2. 如何做到“对扩展开放、修改关闭”?

      我们要时刻具备扩展意识、抽象意识、封装意识。在写代码的时候,我们要多花点时间思考一下,这段代码未来可能有哪些需求变更,如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,在不改动代码整体结构、做到最小代码改动的情况下,将新的代码灵活地插入到扩展点上。

      很多设计原则、设计思想、设计模式,都是以提高代码的扩展性为最终目的的。特别是 23 种经典设计模式,大部分都是为了解决代码的扩展性问题而总结出来的,都是以开闭原则为指导原则的。最常用来提高代码扩展性的方法有:多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、职责链、状态)。

  • 相关阅读:
    linux安装redis 完整步骤
    java获取音频文件播放时长
    jar包部署在linux上后浏览器访问不到的问题
    FileRead方法
    FileWrite方法
    用Calendar方法知道月份的天数
    Calendar的用法
    两个时间相减(java简单用法)
    单列体现(Runtime)
    Random方法
  • 原文地址:https://www.cnblogs.com/xcgShare/p/14792205.html
Copyright © 2011-2022 走看看