张晗的个人博客

技术的价值是业务

IDEA 是 jetbrains 为 Javaer 打造的 IDE,我基本上 Java、Golang、Python 和 JS 等都用它来编写。

我使用 Toolbox 来管理 jetbrains 的所有产品。

版本

IntelliJ IDEA 2022.3.3

阅读全文 »

Mermaid 可以在 Markdown 中用文本和代码的方式创建可视化图表。包括但不限于:流程图(Flowchart)、时序图(Sequence Diagram)、类图(Class Diagram)、ER 图(Entity-Relationship Diagram)等。

优点

  • 使用文本和代码的方式绘图,无需关心元素排布,JS 引擎会自动渲染;
  • 极客属性;
  • 广泛。有 md 文件就可以绘图;

缺点

  • 写图需要配合文档,曲线高;
  • 不能自定义元素排布;

如何开始

  1. 明确是否使用 mermaid 写图;
  2. 决定图表类型,打开 mermaid tutorials 对应图表文档;
  3. 复制一份官方图表模板;
  4. 查看官网的语法样式,选择自己需要的进行绘制;
阅读全文 »

模式描述

将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建出不同对象。

优点

  1. 避免构造器参数太多,按需构造;
  2. 避免 setter 方法,使对象不可变;
  3. 构造和表示代码分开;
  4. 更精细控制构造过程;

缺点

应用场景

  1. 复杂对象的创建独立于创建对象的组成部分时;
  2. 需要按需构造时;
阅读全文 »

模式描述

门面模式(Facade)模式,为子系统提供一组统一的接口,定义一组高层接口让子系统更易用,这个接口使得子系统更容易使用。

优点

  1. 屏蔽了子系统组件;
  2. 拆分用户和子系统;

缺点

应用场景

  1. 解决易用性问题。例如 Linux 系统提供的系统调用函数等;
  2. 解决性能问题。
  3. 解决分布式事务问题。
  4. 拆分客户端和实现之间的依赖;
阅读全文 »

DATE CHANGELOG
2023年4月30日 init

在 UML 中,类图是静态的。通过展示类、类属性、类操作和类之间的关系,来描述系统结构。

模型

模型是类途中对现实世界的抽象。

接口

一组行为的抽象。

---
title: 接口示例
---
classDiagram
class Speaker {
	<<interface>>
	speak(String statement) String 
}

抽象类

---
title: 类示例
---
classDiagram
class Abstract {
	<<abstract>>
}

具有属性和方法的对象。

---
title: 类示例
---
classDiagram
class Speakerman {
	String name
    speak(String statement) String 
}

可见性

#表示 public

-表示 private

#表示 protected

~表示 package 或者 internal

---
title: 可见性示例
---
classDiagram
class Visibility {
	+int n1
	-int n2
	#int n3
	~int n4
	
	+m1()
	-m1()
	#m3()
	~m4()
}

修饰符

*表示 abstract,斜体

$表示 static,下划线

---
title: 修饰符示例
---
classDiagram
class Modifier {
	int n1$
	
	+m1()*
    +m2()$
}

关系

关系是模型元素之间的连接。

继承

空心三角 + 实线,男人属于人。

Man is a Person

---
title: 继承示例
---
classDiagram
class Person {
	
}

class Man {
	
}

Person <|-- Man

实现

空心三角 + 虚线,鸟能飞。

Bird has Fly ability

---
title: 继承示例
---
classDiagram
class Fly {
	<<interface>>
}

class Bird {
	
}

Fly <|.. Bird

聚合

空心菱形 + 实线,教室拥有黑板,但黑板不是教室的一部分。

Classroom possess Blaskboard, but Blackboard isn’t part of Classroom

---
title: 聚合示例
---
classDiagram
class Classroom {
	Blackboard blackboard
}

class Blackboard {
	
}

Classroom o-- Blackboard

组合

实心菱形 + 实线,人有胳膊,同时胳膊不能独立存在。

Arm is part of Person

---
title: 组合示例
---
classDiagram
class Person {
	Arm arm
}

class Arm {
	
}

Person *-- Arm

依赖

箭头 + 虚线,人依赖水。

Person depand on Water

---
title: 依赖示例
---
classDiagram
class Person {
	Water water
}

class Water {
	
}

Water <.. Person

关联

箭头 + 实线,,人需要知道天气。

Person should know Climate

---
title: 关联示例
---
classDiagram
class Person {
	Climate climate
}

class Climate {
	
}

Climate <-- Person

总结

  1. 继承和实现可以相互替代。使用接口使用实现关系,类之间选择继承关系;
  2. 依赖和关联不常用。因为依赖关系和关联关系可以进一步定义为聚合关系或者组合关系;
  3. 聚合适用范围比组合更广;
0%