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