zoukankan      html  css  js  c++  java
  • 设计模式

    使用设计模式的目的

    1. 代码重用性 (即:相同功能的代码,不用多次编写)
    2. 可读性 (即:编程规范性, 便于其他程序员的阅读和理解)
    3. 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
    4. 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)
    5. 使程序呈现高内聚,低耦合的特性

    设计模式的核心思想

    1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
    2. 针对接口编程,而不是针对实现编程
    3. 为了交互对象之间的松耦合设计而努力

    设计模式的七大原则

    1. 单一职责原则
      1. 降低类的复杂度,一个类只负责一项职责。
      2. 提高类的可读性,可维护性
      3. 降低变更引起的风险
      4. 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则
    2. 接口隔离原则
      1. 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
      2. 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类 B 和类 D 必须去实现他们不需要的方法
      3. 将接口 Interface1 拆分为独立的几个接口(这里我们拆分成 3 个接口),类 A 和类 C 分别与他们需要的接口建立 依赖关系。也就是采用接口隔离原则
    3. 依赖倒转原则
      1. 高层模块不应该依赖低层模块,二者都应该依赖其抽象
      2. 抽象不应该依赖细节,细节应该依赖抽象
      3. 依赖倒转的中心思想是面向接口编程
      4. 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多,以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在 java 中,抽象指的是接口或抽象类,细节就是具体的实现类
      5. 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成
    4. 里氏替换原则
      1. 如果对每个类型为 T1 的对象 o1 ,都有类型为 T2 的对象 o2 ,使得以 T1 定义的所有程序P在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象
      2. 在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法
      3. 里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖来解决问题
    5. 开闭原则
      1. 开闭原则(OpenClosedPrinciple)是编程中最基础、最重要的设计原则
      2. 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节
      3. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化
      4. 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则
    6. 迪米特法则
      1. 一个对象应该对其他对象保持最少的了解
      2. 类与类关系越密切,耦合度越大
      3. 迪米特法则(DemeterPrinciple)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息
      4. 迪米特法则还有个更简单的定义:只与直接的朋友通信
      5. 直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间 是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返 回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变 量的形式出现在类的内部
    7. 合成复用原则
      1. 尽量使用合成/聚合的方式,而不是使用继承

    设计模式的类型

    1. 创建型模式:
      单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
    2. 结构型模式:
      适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
    3. 行为型模式:
      模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、 解释器模式、状态模式、策略模式、职责链模式(责任链模式)

    项目源码

    GitHub

    Gitee

  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13395235.html
Copyright © 2011-2022 走看看