zoukankan      html  css  js  c++  java
  • Java设计模式_七大原则

    简介

    • 单一职责原则。对类来说,即一个类应该只负责一项职责。
    • 开闭原则。对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能去修改原有代码,使用接口和抽象类实现一个热插拔的效果。
    • 里氏替换原则。任何基类可以出现的地方,子类一定可以出现。实现抽象的规范,实现子父类相互替换。
    • 依赖倒置原则。针对接口编程,依赖于抽象而不依赖于具体。
    • 接口隔离原则。降低耦合度,接口单独设计,相互隔离。
    • 最少知道原则(迪米特法则)。一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
    • 合成复用原则。尽量使用聚合、组合的方式,而不是使用继承。

    单一职责原则

    对类来说,即一个类应该只负责一项职责。如类A负责两个不同的职责:职责1、职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1、A2。

    开闭原则

    一个实体如类,模板和函数应该对扩展开放(服务提供方),对修改关闭(服务使用方)。用抽象构建框架,用实现扩展细节。

    • 是编程中最基础。最重要的设计原则。
    • 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现变化。
    • 编程中遵循其他原则以及使用是设计模式的目的就是遵循开闭原则。

    里氏替换原则

    如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。换句话说,所有引用基类的地方必须能够透明的使用其子类对象。

    在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。

    • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    • 子类中可以增加自己特有的方法。
    • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
    • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
    • 继承实际上让两个类的耦合度增强了,在适当的情况下,可以通过聚合、组合、依赖来解决问题。

    依赖倒置原则

    高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。即针对接口编程,不要针对实现编程。

    • 依赖倒置的中心思想就是面向接口编程。传递依赖关系有三种方式,以上的说的是是接口传递,另外还有两种传递方式:构造方法传递setter方法传递,回忆一下Spring框架。
    • 依赖倒置原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构要比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类。
    • 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
    • 低层模板尽量都要有抽象类或接口,或者两个都有,程序稳定性更好。
    • 变量的声明类型尽量都是抽象类或接口,这样我们的变量变量引用和实际对象间就存在一个缓冲层,有利于程序的扩展和优化。
    • 继承时遵循里氏替换原则。

    接口隔离原则

    客户端不应该依赖它不需要的接口,即一个类对另外一个类的依赖应该建立在最小的接口上。

    • 建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。

    最少知道原则(迪米特法则)

    一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

    • 一个对象应该对其他对象保持最少的了解。
    • 类于类的关系越密切,耦合度越大。
    • 通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
    • 迪米特法则还有一个更简单的定义:只与直接的朋友通信
    • 直接朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。

    合成复用原则

    尽量使用聚合、组合的方式,而不是使用继承。

  • 相关阅读:
    hdu1874 畅通工程续
    hdu2544 最短路
    hdu1068 Girls and Boys
    hdu1151 Air Raid
    hdu1150 Machine Schedule
    hdu2063 过山车
    Bootstrap 学习笔记12 轮播插件
    Bootstrap 学习笔记11 按钮和折叠插件
    Bootstrap 学习笔记10 弹出框和警告框插件
    Bootstrap 学习笔记9 标签页和工具提示插件
  • 原文地址:https://www.cnblogs.com/neverth/p/11760931.html
Copyright © 2011-2022 走看看