0%

面向对象

  • 面向对象分析 OOA(Object Oriented Analysis)
  • 面向对象设计 OOD(Object Oriented Design)
  • 面向对象编程 OOP(Object Oriented Programming)

结果:类的设计

  1. 程序被拆解为哪些类
  2. 每个类有哪些属性方法
  3. 类和类之间如何交互

面向对象分析:搞清楚做什么
面向对象设计:搞清楚怎么做
面向对象编程:将分析和设计的结果翻译成代码的过程

UML 使用

图

  • 类图
  • 用例图
  • 顺序图
  • 活动图
  • 状态图
  • 组件图

类间关系

  • 泛化
  • 实现
  • 关联
  • 聚合
  • 组合
  • 依赖
  • …

面向对象-封装、抽象、继承、多态

- 封装 抽象 继承 多态
对象
What
隐藏信息
保护数据访问
隐藏具体实现
使用者只需关心功能
无需关心实现
表示 is-a 关系
分为单继承和多继承
子类替换父类
在运行时调用子类的实现
方法
How
暴露有限接口和属性
需要编程语言提供访问控制的语法
通过接口类或者抽象类实现
特殊语法机制非必须
需要编程语言提供特殊语法机制
例如 Java 的 “extends”, C++ 的 “:”
需要编程语言提供特殊的语法机制
比如继承、接口类、duck-typing
目的
Why
提高代码可维护性
降低接口复杂度,提高类的易用性
提高代码的扩展性、维护性
降低复杂度,减少细节负担
解决代码复用问题 提高代码扩展性和复用性

只读

只读列表

Collections.unmodifiableList()

面向过程

Constants:拆解为功能更加单一的类,否则会导致依赖类的重新编译
Utils:只包含静态方法
MVC:(基于贫血模型的开发模式)

充血模型

边界清晰(耦合低)、功能内敛(高内聚)

抽象&&接口

- 抽象 接口
定义 What 1、不允许实例化,只能被继承
2、可包含属性和方法,包含抽象方法
3、子类继承抽象类必须重写抽象方法
1、具有某些功能,或称为协议(contract)
2、不允许实例化,只能被实现
3、不包含属性和普通方法,只声明方法,default 方法
4、类实现接口时,必须实现声明中的所有方法
方法 how abstract-extends interface-implements
目的 Why 解决复用问题,适用于 is-a 的关系 1、解决方法抽象问题,适用于 has-a 的关系
2、表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性

一、抛砖引玉

  • 数据结构和算法:是教如何写高效代码
  • 设计模式:如何写出可扩展、可读、可维护的高质量代码

二、头脑风暴

  • 设计模式
    • 引出问题(开发通用模块注意问题?)
      • 如何分层、分模块?
      • 应该怎么划分类?
      • 每个类应该具有哪些属性、方法?
      • 怎么设计类之间的交互?
      • 该用继承还是组合?
      • 该使用接口还是抽象类?
      • 怎么做到解耦、高内聚低耦合?
      • 该用单例模式还是静态方法?
      • 用工厂模式创建对象还是直接 new 出来?
      • 如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?
      • …
    • 评价标准:代码质量
      • 可维护性
        • 在不破坏原有代码设计、不引入新 bug 情况下,能够快速修改或添加代码
      • 可读性
        • 代码是否符合编码规范
        • 命名是否达意
        • 注释是否详尽
        • 函数是否长短合适
        • 模块划分是否清晰
        • 是否符合高内聚低耦合等
      • 可扩展性
        • 对修改关闭,对扩展开放
      • 灵活性
        • 易扩展、易复用、易使用
      • 简洁性(简单、复杂)
        • 思从深而行从简
        • KISS:keep it simple,stupid
      • 可复用性
        • DRY:Donot repeat yourself
        • 继承多态(面向对象特性)
        • 单一职责(设计原则)
        • 解耦、高内聚、低耦合(重构技巧)
      • 可测试性
        • 重构时
    • 设计思想(面向对象)-基础
      • 封装、抽象、继承、多态
      • 面向对象编程 vs 面向过程编程
      • 面向对象分析、设计、编程
      • 接口 vs 抽象类
      • 基于接口而非实现编程
      • 多用组合少用继承
      • 贫血模型和充血模型
    • 设计原则-场景
      • SOLID 原则-SRP 单一职责原则
      • SOLID 原则-OCP 开闭原则
      • SOLID 原则-LSP 里氏替换原则
      • SOLID 原则-ISP 接口隔离原则
      • SOLID 原则-DIP 依赖倒置原则
      • DRY 原则、KISS 原则、YAGNI 原则、LOD 法则
    • 设计模式-设计问题
      • 创建型
        • 单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式
        • 原型模式
      • 结构型
        • 代理模式、桥接模式、装饰者模式、适配器模式
        • 门面模式、组合模式、享元模式
      • 行为型
        • 观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式
        • 访问者模式、备忘录模式、命令模式、解释器模式、中介模式
    • 编码规范-可读性
      • 20 条最快速改善代码质量的编程规范
    • 重构技巧-保证质量
      • 目的 why、对象 what、时机 when、方法 how
      • 单元测试和代码的可测试性
      • 大重构(大规模高层次)
      • 小重构(小规模低层次)

三、附录

代码质量描述

灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可读性(readability)、可理解性(understandability)、易修改性(changeability)、可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(high performance)、安全性(security)、兼容性(compatibility)、易用性(usability)、整洁(clean)、清晰(clarity)、简单(simple)、直接(straightforward)、少即是多(less code is more)、文档详尽(well-documented)、分层清晰(well-layered)、正确性(correctness、bug free)、健壮性(robustness)、鲁棒性(robustness)、可用性(reliability)、可伸缩性(scalability)、稳定性(stability)、优雅(elegant)、好(good)、坏(bad)……

主流思想

面向过程、面向对象、函数式编程

设计模式-类模式

一、系统功能

  • 数据同步
    • 数据源管理
    • 任务管理
      • 项目管理
      • 任务管理
      • 任务构建
    • 日志管理
    • 执行器管理
    • 运行报表

二、流程逻辑

1、任务管理平台-执行器通信

2、执行器路由策略

3、datax数据同步流程

4、日志处理

xxl-job内容

admin服务端

启动顺序

  1. XxlJobAdminConfig
  2. XxlJobScheduler
  3. 如下表格内容

执行类型:通过配置bean名称(datax、shell、python、powershell)

XxlJobScheduler

序号 标题 内容 频率 备注
① 国际化
② 注册监听器 1、扫描sync_job_registry表
2、更新sync_job_group表
30s
③ 失败监听器 1、扫描fail_job_log
2、重试
3、告警
10s
④ 丢失监听器 60s 执行超过10min则表示失败
⑤ 任务触发器 线程池
快触发器、慢触发器
⑥ 日志报告 执行统计
⑦ 定时任务 5s 定时执行

作为springboot程序:提供JobApiController实现AdminBiz的注册、取消、回调接口

executor执行器

启动顺序

  1. XxlJobConfig
  2. XxlJobSpringExecutor
  3. initJobHandlerMethodRepository
  4. 工厂类启动
  5. 如下表格内容

XxlJobExecutor

序号 标题 内容 频率 备注
① 初始化日志路径
② 初始管理平台客户端
③ 日志清理线程 1、扫描文件夹
2、删除过期
1d
④ 回调处理 1、触发器回调线程
2、异常重试线程
30s
⑤ netty服务端提供接口 1、启动netty
2、channel监听
3、注册地址到管理平台

停止时有相关处理:资源回收

  1. 释放netty端口
  2. 停止线程池
  3. 停止在运行的线程
  4. 停止日志处理线程
  5. 停止回调线程、重试线程

hexo new “My New Post”
执行新增 blog 会自动添加用户名信息:coauthor

https://github.com/theme-next/hexo-theme-next
使用 next 主题

https://github.com/theme-next/awesome-next#live-preview
next 其他插件

https://github.com/theme-next/theme-next-calendar
日历云插件

https://github.com/theme-next/hexo-generator-searchdb
搜索插件
配置方法:search.xml 路径、开启搜索

https://github.com/hinastory/hexo-tag-details

Where are you from?

I’m from the Earth. Water Planet!

What food do you like?
  1. Sushi
  2. Tempura
  3. Sukiyaki

https://github.com/HunterXuan/hexo-simple-mindmap

https://github.com/cocowool/hexo-image-link

图片测试 sdfdf
sdfsd

https://github.com/aspirewit/hexo-tag-easy-charts

线上编程!!!!应该成功了吧

1
2
3
4
5
6
7
8
9
hello world

Markdown 字体颜色
<font face="黑体">我是黑体字</font>
<font face="微软雅黑">我是微软雅黑</font>
<font face="STCAIYUN">我是华文彩云</font>
<font color=#0099ff size=7 face="黑体">color=#0099ff size=72 face="黑体"</font>
<font color=red size=5>gray</font>
<font color="#4590a3" size="6px">文字</font>

我是黑体字
我是微软雅黑
我是华文彩云
color=#0099ff size=72 face=”黑体”
gray
文字

Markdown 语法-简书版
Markdown 语法-runoob 版

https://github.com/bubkoo/hexo-filter-flowchart

sdfsdff

https://github.com/bubkoo/hexo-filter-sequence

https://mermaid-js.github.io/mermaid/#/n00b-gettingStarted

graph TD A[Client] --> B[Load Balancer] B --> C[Server01] B --> D[Server02]
gantt section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d
sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!

Here is one mermaid diagram:

graph TD A[Client] --> B[Load Balancer] B --> C[Server1] B --> D[Server2]

And here is another:

graph TD A[Client] -->|tcp_123| B(Load Balancer) B -->|tcp_456| C[Server1] B -->|tcp_456| D[Server2]
gitGraph: options { "nodeSpacing": 150, "nodeRadius": 10 } end commit branch newbranch checkout newbranch commit commit checkout master commit commit merge newbranch
classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label