ProgrammingNotes
  • README
  • accounting会计学
  • Apache
  • ar
  • asciidoc
  • AssemblyLanguage汇编语言
  • authorization授权
    • 1.jwt
    • 2.oauth
  • C语言
    • C++
  • cache
  • Computer计算机相关
    • 1.reinstallSystem重装系统
    • 2.vhd
    • 3.bulidWeb建站
    • 4.computerOrganization计算机原理
  • config配置文件相关
  • ContainerTechnology
    • 1.docker
    • 2.kubernetes
  • cs计算机科学
    • 1.api
      • 1.1.restful
      • 1.2.graphQL
      • 1.3.openAPI
      • 1.4.swagger
    • 10.blockchain区块链
      • 10.1.bitCoin比特币
    • 11.characterEncoding字符编码
    • 12.map
      • 12.1.百度地图
      • 12.2.qgis
      • 12.3.openLayers3
      • 12.4.postGIS
    • 13.ai人工智能
    • 14.machineLearning机器学习
    • 15.ioT物联网
    • 16.microservices微服务
    • 17.serverless无服务架构
    • 2.uml
    • 3.designPattern
    • 33.compilation_tool编译工具
      • 33.1.gradle
      • 33.2.maven
    • 4.devOps
      • 4.1.ci
        • 4.1.1.jenkins
        • 4.1.2.github_actions
        • 4.1.3.team_city
      • 4.2.argoCD
    • 6.dataVisualization数据可视化
    • 7.abandonTechnology可放弃的技术
    • 8.bigData大数据
      • 8.1.streamComputing流计算
      • 8.2.edgeComputing边缘计算
    • 9.deepLearning
  • C#
  • db数据库
    • 1.sql
    • 2.noSQL
      • 2.1.redis
      • 2.2.mongoDB
      • 2.3.hbase
      • 2.4.etcd
    • 3.fileSystem文件系统
      • 3.1.fastDFS
      • 3.2.hdfs
    • 4.postgreSQL
    • 5.sqlserver
    • 6.MySQL
    • 7.oracle
    • 8.oceanBase
    • 9.influxDB
    • DatabaseSecurity数据库安全
    • pl/sql
  • Delphi
  • dorado
  • education
  • english
  • frontEnd前端
    • 1.html
      • 1.1.h5
      • 1.2.webSocket
      • 1.3.html2pdf
    • 10.1.wonder
    • 10.webGL
    • 2.w3C规范
      • 2.1.webAPIs
    • 3.css
    • 4.dom
    • 5.xhtml
    • 6.webAssembly
    • 7.ajax
    • 8.fetch
    • 9.picture
  • git
    • 1.gitbook
    • 2.svn
    • 3.github
    • 4.travis_ci
  • golang
    • go_cloud
    • go_crawler
    • goroutine
    • hydra
  • hardware
  • ios
  • java
    • 1.jvm
    • 2.java高级特性之多线程
    • 3.javafx
    • 4.java网络编程
    • 5.java类加载和反射
    • 6.jms
    • 7.java_cloud
    • 8.jsp
    • 9.spring
  • js
    • 1.npm
    • 13.mockJS
    • 19.bootstrap
    • 2.nodeJS
    • 25.echarts
    • 3.angular
      • 3.1.angularCLI
      • 3.2.angularMaterial
    • 4.react
      • 4.3.reactNative
      • 4.4.next
    • 5.vue
      • 5.1.vue-CLI
      • 5.2.vuex
      • 5.3.axios
      • 5.4.vue-router
      • 5.5.element-ui
      • 5.6.vueCore
      • 5.7.nuxt
    • 6.compilation_tool编译工具
      • 6.1.webpack
      • 6.2.parcel
      • 6.3.grunt
    • 7.lib第三方库
      • 7.1.jQuery
      • 7.2.lodash
    • TypeScript
      • 8.1.tslint
    • Deno
    • JS设计模式
    • ECMAScript
    • JS
    • JS6
    • NativeScript
    • RXJS
    • V8
  • linux
    • 1.vim
    • 2.shell
    • 3.shellScript
    • 4.ubuntu
    • 5.makefile
    • 6.centOS
  • markdown
  • markup_lang
    • JSON
    • YAML
  • math
    • 1.algorithm算法
    • 2.cryptology密码学
    • 3.computerGraphics计算机图形学
    • 4.dataStructure数据结构
  • MC消息通信
    • MQ消息队列
      • 1.kafka
      • 2.rabbitMQ
      • 3.redis
      • 4.activeMQ
      • 5.rocketMQ
      • 6.nats
    • MQTT
      • EMQ
    • RPC
      • gRPC
  • mobile
    • android
      • 1.kotlin
      • 2.weixin
      • 3.miniProgram
    • cordova
    • dart
    • flutter
    • ios
      • xcode
    • ReactNative
  • network网络
    • 2.ss
    • 3.http
    • 4.kcp
    • 5.nmap
    • 5G
    • 6.webCrawler
  • news重要新闻
  • Philosophy哲学
    • AnCoderPrepares程序员的自我修养
    • 软件工程的语录
  • php
  • popularizationOfScience科普
  • protocol
    • 1.rpc
  • python
  • readingNotes读书笔记
    • 1.profession专业笔记
    • 2.sql_Antipatterns
    • 3.unix_Network_Programming
    • 4.the_Docker_Book
  • rust
  • scriptingLanguage
    • 2.lua
    • 3.regularExpression正则表达式
    • 4.julia
    • 5.ruby
  • security安全
  • server服务器相关
    • nginx
    • OpenResty
  • software&tool软件和工具
    • 1.vscode
    • 11.plsqldev
    • 17.androidStudio
    • 3.虚拟机VirtualMachine
    • 4.jetBrains
    • 5.eclipse
    • 7.visualStudio
    • 8.office系列
  • softwaretest软件测试
    • JUnit
  • ssh&ssm
    • 2.hibernate
    • 1.spring
  • unix
    • hackintosh
    • mac
  • vr
  • windows
    • terminal&DOS
    • windows10
    • Wine
  • word一些术语
  • zztemp草稿
    • temp
    • temp4study
    • temp4studyLater以后再学的
Powered by GitBook
On this page
  • 3.DesignPattern
  • 一 概述
  • 1 简介
  • 2 历史
  • 3 常识
  • 4 文档网址等
  • 三 基础
  • 1 软件架构/计算机思维原则
  • 2 设计模式六大原则
  • 3 设计模式
  • 3.7 适配器模式
  • 四 高级
  • 五 经验
  • 六 问题
  • 七 未整理

Was this helpful?

  1. cs计算机科学

3.designPattern

3.DesignPattern

[TOC]

一 概述

设计模式和软件架构

1 简介

也有人称之为"23种指针使用方法",本人觉得设计模式有点像语文中的成语.

  1. 设计模式解决了什么问题

    1. 能够帮助各位更好地掌控现有面向对象系统

    2. 帮助我们做出明智的决策

    3. 降低以后重构的工作量

2 历史

  1. 现在设计模式已经存在了几十年了,其中有一些已经不再适用.但是依然值得我们学习.

3 常识

4 文档网址等

  1. 文档推荐

    1. 《设计模式:可复用面向对象软件的基础》(《Design Patterns: Elements of Reusable Object-Oriented Software》):简称《设计模式》,作者是软件设计领域的四位大师(GoF,“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides)

三 基础

1 软件架构/计算机思维原则

1.1 关注点分离(Separation of concerns,SOC)

相关的:

  1. 分而治之

  2. 模块化

关注点是什么:不变的是流程,变的是实现细节,大部分业务需求,都是在做变的部分,如果不变也就没有业务需求了,变化的东西是什么?找到这个就是我们的关注点。

关注点分离的实现:

  1. 面向接口编程:接口关注的是能做什么;接口的实现关注的是如何做的问题

  2. 配置文件:比如数据库的驱动、连接都可以写在配置文件里。只关注有数据库的服务,不关注具体的数据库是什么

关注点开放:将业务会变的部分开放出去,让业务方自己去做,而自己只做核心的功能

2 设计模式六大原则

最开始只有单一职责和开闭原则

2.1 单一职责

  1. 和AOP的关系

2.2 里氏替换

2.3 依赖倒置

2.4 接口隔离

2.5 迪米特原则(降低耦合)

2.6 开闭原则(OCP)

一个好的设计,对扩展应该是开放的,对修改应该是关闭的。

3 设计模式

3.1 单例模式

3.2 模板模式

3.3 工厂模式

简单工厂模式

3.4 命令模式

3.5 职责链模式

3.6 观察者模式(Observer)

  1. 拉

  2. 推

  3. 发布订阅模式

  4. ... 观察者模式:发布(release)--订阅(subscibe),变化(change)--更新(update) 事件驱动模型:请求(request)--响应(response),事件发生(occur)--事件处理

3.7 适配器模式

四 高级

  1. 每个模式都有自己优点和缺点,都了解才能更好的使用.

五 经验

六 问题

七 未整理

  1. 关注点分离

Previous2.umlNext33.compilation_tool编译工具

Last updated 3 years ago

Was this helpful?

待研究:

Java最优良的Adapter模式:适配器模式