《GJJ-004 分析模式及实现》,umlchina.com/url/video.html

原图6.9

EA绘制

图6.9 使用单例类来实现个体实例方法。
PlantUML
@startuml
class 州
abstract class 州税过账规则 {
+ {abstract} 计算()
}
class 马萨诸塞州税 <<Singleton>> {
+ 计算()
}
class 加利福尼亚州税 <<Singleton>> {
+ 计算()
}
class 纽约州税 <<Singleton>> {
+ 计算()
}
州 "1" -- "0..*" 州税过账规则 : /
马萨诸塞州税 --|> 州税过账规则
加利福尼亚州税 --|> 州税过账规则
纽约州税 --|> 州税过账规则
@enduml

原图6.10

EA绘制

图6.10 使用策略模式[1]实现个体实例方法。
PlantUML
@startuml
class 州
class 州税过账规则 {
+ 计算()
{body: 计算方法.计算()}
}
abstract class 方法 {
+ {abstract} 计算()
}
class 马萨诸塞州税 <<Singleton>> {
+ 计算()
}
class 加利福尼亚州税 <<Singleton>> {
+ 计算()
}
class 纽约州税 <<Singleton>> {
+ 计算()
}
州 "1" -- "0..*" 州税过账规则
州税过账规则 “0..*” -- “1\n-计算方法“ 方法
马萨诸塞州税 --|> 方法
加利福尼亚州税 --|>方法
纽约州税 --|>方法
@enduml

原图6.11

EA绘制

图6.11 使用策略模式的交互图。
通过询问提供给它的分录,方法获取它需要的任何信息。
PlantUML
@startuml
participant ":账户"
participant ":过账规则"
participant ":方法"
participant ":分录"
participant ":人"
":账户" -> ":过账规则" : 处理(一个账户)
activate ":账户"
activate ":过账规则"
":过账规则" -> ":账户" : 取未处理分录
activate ":账户"
deactivate ":账户"
loop 所有未处理分录
":过账规则" -> ":过账规则" : 处理(一个分录)
activate ":过账规则"
":过账规则" -> ":方法" : 计算(一个分录)
activate ":方法"
":方法" -> ":分录" : 取所有者
":方法" -> ":人" : 是否已婚
":方法" --> ":过账规则" : 结果
deactivate ":方法"
create "新分录:分录"
":过账规则" --> "新分录:分录" : 创建
deactivate ":过账规则"
end
deactivate ":过账规则"
deactivate ":账户"
@enduml

原图6.12

EA绘制

图6.12 使用内部case语句实现个体实例方法。
只要case语句被封装在过账规则内,这就不违反面向对象原则。
PlantUML
@startuml
class 州
class 州税过账规则 {
+计算()
-计算马萨()
-计算加州()
}
州 "1" -- "0..*" 州税过账规则
note right of 州税过账规则::计算
case(州)
马萨诸塞州:计算马萨()
加利福尼亚州:计算加州()
……
end note
@enduml

&spm=1001.2101.3001.5002&articleId=162901531&d=1&t=3&u=48e31c55048748eb8b24d2dded3f0f8b)
353

被折叠的 条评论
为什么被折叠?



