GithubHelp home page GithubHelp logo

gof's Introduction

GOF设计模式学习笔记

理解面向对象

  • 概念理解

    面向对象的设计初衷是,为了抵御代码层面上不断变化的需求关系

    三大特性:封装,继承,多态

    五大原则:单一职责、开放封闭、里式替换、依赖倒置、接口分离

  • 扩展理解特性

    • 隔离变化:将变化的部分与稳定的部分通过利用接口隔离开来
    • 各司其职:新增的对象,不应当影响原有类型

软件设计需要遵循的原则

一般一个合理的设计模式需要遵循八大设计原则(前5大为面向对象原则),这些原则就好像是一把标尺,用来衡量你的应用代码设计品质是否正确

稳定 --- 业务角度上处于稳定的部分

变化 --- 业务角度上处于调研或者用户反馈不确定的部分

  • 依赖倒置原则(DIP) --- 隔离变化

    稳定(业务稳定)的模块不应该依赖于不稳定(业务不确定)的模块,两则都应该依赖于抽象(稳定)

    同理抽象(稳定)不应该依赖于实现细节(不稳定,变化的部分),实现细节应该依赖于抽象

  • 开放封闭原则(OCP) --- 各司其职

    对扩展开放,对更改封闭

    类模块应该是可扩展,但是不可修改

  • 单一职责原则(SRP)

    一个类应该仅有一个引起它变化的原因

    变化的方向隐含着类的职责

  • Liskov替换原则(LSP)

    子类必须能够替换他们的基类

    继承表达类型的抽象

  • 接口隔离原则(ISP)

    接口应该小而完备

    不应该强迫客户程序依赖他们不用的方法

  • 优先使用对象组合(成员变量),而不是类继承

    部分包含的关系下,继承在某种程度上破坏了封装类,子类父类的耦合度高

  • 封装变化点 --- 封装作用宏观的理解

    创建变化于稳定之间的分界层,保证变化部分不影响稳定部分

  • 针对接口编程,而不是针对实现编程

    原则上来说,一切变化的部分都应该申明接口后去写实现

23种设计原则

  1. 模板方法
  2. 策略模式
  3. 观察者模式
  4. 装饰模式
  5. 桥模式
  6. 工厂模式
  7. 抽象工厂模式
  8. 原型模式
  9. 构建器模式
  10. 单件模式
  11. 享元模式
  12. 门面模式
  13. 代理模式
  14. 适配器模式
  15. 中介者
  16. 状态模式
  17. 备忘录
  18. 组合模式
  19. 迭代器模式
  20. 职责链模式
  21. 命令模式
  22. 访问器模式
  23. 解释器

gof's People

Contributors

ericdejavu avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.