搭建网站服务器平台的三种方式,集团网站建设服务,上海网站建设机构,html5源码文章目录 1. 依赖和关联1.1 依赖#xff08;Dependency#xff09;概念类图示例代码示例 1.2 关联#xff08;Association#xff09;概念类图示例代码示例 2. 组合和聚合#xff08;特殊的关联关系#xff09;2.1 聚合#xff08;Aggregation#xff09;概念类图示例代… 文章目录 1. 依赖和关联1.1 依赖Dependency概念类图示例代码示例 1.2 关联Association概念类图示例代码示例 2. 组合和聚合特殊的关联关系2.1 聚合Aggregation概念类图示例代码示例 2.2 组合Composition概念类图示例代码示例 3. 实现和泛化代码的重用3.1 实现Realization概念类图示例代码示例 3.2 泛化Generalization概念类图示例代码示例 1. 依赖和关联
1.1 依赖Dependency
概念
体现为局部变量、方法的形参或者对静态方法的调用。 如出行使用汽车下雨打伞等是一种弱关联关系也是一种临时关系
类图示例 #mermaid-svg-w4eFQNbTxr4ykOtC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-w4eFQNbTxr4ykOtC .error-icon{fill:#552222;}#mermaid-svg-w4eFQNbTxr4ykOtC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-w4eFQNbTxr4ykOtC .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-w4eFQNbTxr4ykOtC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-w4eFQNbTxr4ykOtC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-w4eFQNbTxr4ykOtC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-w4eFQNbTxr4ykOtC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-w4eFQNbTxr4ykOtC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-w4eFQNbTxr4ykOtC .marker.cross{stroke:#333333;}#mermaid-svg-w4eFQNbTxr4ykOtC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-w4eFQNbTxr4ykOtC g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-w4eFQNbTxr4ykOtC g.classGroup text .title{font-weight:bolder;}#mermaid-svg-w4eFQNbTxr4ykOtC .nodeLabel,#mermaid-svg-w4eFQNbTxr4ykOtC .edgeLabel{color:#131300;}#mermaid-svg-w4eFQNbTxr4ykOtC .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-w4eFQNbTxr4ykOtC .label text{fill:#131300;}#mermaid-svg-w4eFQNbTxr4ykOtC .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-w4eFQNbTxr4ykOtC .classTitle{font-weight:bolder;}#mermaid-svg-w4eFQNbTxr4ykOtC .node rect,#mermaid-svg-w4eFQNbTxr4ykOtC .node circle,#mermaid-svg-w4eFQNbTxr4ykOtC .node ellipse,#mermaid-svg-w4eFQNbTxr4ykOtC .node polygon,#mermaid-svg-w4eFQNbTxr4ykOtC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-w4eFQNbTxr4ykOtC .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-w4eFQNbTxr4ykOtC g.clickable{cursor:pointer;}#mermaid-svg-w4eFQNbTxr4ykOtC g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-w4eFQNbTxr4ykOtC g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-w4eFQNbTxr4ykOtC .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-w4eFQNbTxr4ykOtC .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-w4eFQNbTxr4ykOtC .dashed-line{stroke-dasharray:3;}#mermaid-svg-w4eFQNbTxr4ykOtC #compositionStart,#mermaid-svg-w4eFQNbTxr4ykOtC .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #compositionEnd,#mermaid-svg-w4eFQNbTxr4ykOtC .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #dependencyStart,#mermaid-svg-w4eFQNbTxr4ykOtC .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #dependencyStart,#mermaid-svg-w4eFQNbTxr4ykOtC .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #extensionStart,#mermaid-svg-w4eFQNbTxr4ykOtC .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #extensionEnd,#mermaid-svg-w4eFQNbTxr4ykOtC .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #aggregationStart,#mermaid-svg-w4eFQNbTxr4ykOtC .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC #aggregationEnd,#mermaid-svg-w4eFQNbTxr4ykOtC .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-w4eFQNbTxr4ykOtC .edgeTerminals{font-size:11px;}#mermaid-svg-w4eFQNbTxr4ykOtC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Person Travel(car Car) Car 代码示例
package mainimport fmt
//定义人的类
type Person struct {Name string
}
//该类有旅行方法需要车作为参数
func (p *Person) Travel(car Car) {fmt.Printf(%q 坐着 %q 去旅行, p.Name, car.Name)
}
//定义一个汽车类它是人的依赖
type Car struct {Name string
}func main() {//实例化一个人guanYu : Person{Name: 关羽,}//实例化一辆车chiTu : Car{Name: 赤兔,}//执行人的旅行方法车的实例作为参数guanYu.Travel(*chiTu)
}输出
关羽坐着赤兔取旅行1.2 关联Association
概念
体现为类的属性golang中可以表现为结构体的成员 如我的朋友聚合人和身体部位组合汽车和轮子组合是一种强关联关系也是一种长期关系
类图示例 #mermaid-svg-UuD6WRaqSLnLGZfN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UuD6WRaqSLnLGZfN .error-icon{fill:#552222;}#mermaid-svg-UuD6WRaqSLnLGZfN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UuD6WRaqSLnLGZfN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-UuD6WRaqSLnLGZfN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UuD6WRaqSLnLGZfN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UuD6WRaqSLnLGZfN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UuD6WRaqSLnLGZfN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UuD6WRaqSLnLGZfN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UuD6WRaqSLnLGZfN .marker.cross{stroke:#333333;}#mermaid-svg-UuD6WRaqSLnLGZfN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UuD6WRaqSLnLGZfN g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-UuD6WRaqSLnLGZfN g.classGroup text .title{font-weight:bolder;}#mermaid-svg-UuD6WRaqSLnLGZfN .nodeLabel,#mermaid-svg-UuD6WRaqSLnLGZfN .edgeLabel{color:#131300;}#mermaid-svg-UuD6WRaqSLnLGZfN .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-UuD6WRaqSLnLGZfN .label text{fill:#131300;}#mermaid-svg-UuD6WRaqSLnLGZfN .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-UuD6WRaqSLnLGZfN .classTitle{font-weight:bolder;}#mermaid-svg-UuD6WRaqSLnLGZfN .node rect,#mermaid-svg-UuD6WRaqSLnLGZfN .node circle,#mermaid-svg-UuD6WRaqSLnLGZfN .node ellipse,#mermaid-svg-UuD6WRaqSLnLGZfN .node polygon,#mermaid-svg-UuD6WRaqSLnLGZfN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UuD6WRaqSLnLGZfN .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-UuD6WRaqSLnLGZfN g.clickable{cursor:pointer;}#mermaid-svg-UuD6WRaqSLnLGZfN g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-UuD6WRaqSLnLGZfN g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-UuD6WRaqSLnLGZfN .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-UuD6WRaqSLnLGZfN .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-UuD6WRaqSLnLGZfN .dashed-line{stroke-dasharray:3;}#mermaid-svg-UuD6WRaqSLnLGZfN #compositionStart,#mermaid-svg-UuD6WRaqSLnLGZfN .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #compositionEnd,#mermaid-svg-UuD6WRaqSLnLGZfN .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #dependencyStart,#mermaid-svg-UuD6WRaqSLnLGZfN .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #dependencyStart,#mermaid-svg-UuD6WRaqSLnLGZfN .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #extensionStart,#mermaid-svg-UuD6WRaqSLnLGZfN .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #extensionEnd,#mermaid-svg-UuD6WRaqSLnLGZfN .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #aggregationStart,#mermaid-svg-UuD6WRaqSLnLGZfN .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN #aggregationEnd,#mermaid-svg-UuD6WRaqSLnLGZfN .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UuD6WRaqSLnLGZfN .edgeTerminals{font-size:11px;}#mermaid-svg-UuD6WRaqSLnLGZfN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Person Head:Head Hand:String Head 代码示例 参考下文 聚合、组合 2. 组合和聚合特殊的关联关系
2.1 聚合Aggregation
概念
是关联关系的一种表示一种弱的“拥有”关系。 如人之于人群苹果之于苹果堆体现了群体和个体的关系
类图示例 主角的朋友们成员是由配角聚合而成的一群人他们和主角不要求有相同的生命周期 #mermaid-svg-v7ewO3qYxrN5WZd1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-v7ewO3qYxrN5WZd1 .error-icon{fill:#552222;}#mermaid-svg-v7ewO3qYxrN5WZd1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-v7ewO3qYxrN5WZd1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-v7ewO3qYxrN5WZd1 .marker.cross{stroke:#333333;}#mermaid-svg-v7ewO3qYxrN5WZd1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-v7ewO3qYxrN5WZd1 g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-v7ewO3qYxrN5WZd1 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-v7ewO3qYxrN5WZd1 .nodeLabel,#mermaid-svg-v7ewO3qYxrN5WZd1 .edgeLabel{color:#131300;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-v7ewO3qYxrN5WZd1 .label text{fill:#131300;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-v7ewO3qYxrN5WZd1 .classTitle{font-weight:bolder;}#mermaid-svg-v7ewO3qYxrN5WZd1 .node rect,#mermaid-svg-v7ewO3qYxrN5WZd1 .node circle,#mermaid-svg-v7ewO3qYxrN5WZd1 .node ellipse,#mermaid-svg-v7ewO3qYxrN5WZd1 .node polygon,#mermaid-svg-v7ewO3qYxrN5WZd1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-v7ewO3qYxrN5WZd1 .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 g.clickable{cursor:pointer;}#mermaid-svg-v7ewO3qYxrN5WZd1 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-v7ewO3qYxrN5WZd1 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-v7ewO3qYxrN5WZd1 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-v7ewO3qYxrN5WZd1 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-v7ewO3qYxrN5WZd1 .dashed-line{stroke-dasharray:3;}#mermaid-svg-v7ewO3qYxrN5WZd1 #compositionStart,#mermaid-svg-v7ewO3qYxrN5WZd1 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #compositionEnd,#mermaid-svg-v7ewO3qYxrN5WZd1 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #dependencyStart,#mermaid-svg-v7ewO3qYxrN5WZd1 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #dependencyStart,#mermaid-svg-v7ewO3qYxrN5WZd1 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #extensionStart,#mermaid-svg-v7ewO3qYxrN5WZd1 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #extensionEnd,#mermaid-svg-v7ewO3qYxrN5WZd1 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #aggregationStart,#mermaid-svg-v7ewO3qYxrN5WZd1 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 #aggregationEnd,#mermaid-svg-v7ewO3qYxrN5WZd1 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-v7ewO3qYxrN5WZd1 .edgeTerminals{font-size:11px;}#mermaid-svg-v7ewO3qYxrN5WZd1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Protagonist Name:string Friends:List SupportingRole 因为聚合也是一种特殊的关联关系因此可以画成 #mermaid-svg-epwc3rDUUPAHC6Ch {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-epwc3rDUUPAHC6Ch .error-icon{fill:#552222;}#mermaid-svg-epwc3rDUUPAHC6Ch .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-epwc3rDUUPAHC6Ch .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-epwc3rDUUPAHC6Ch .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-epwc3rDUUPAHC6Ch .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-epwc3rDUUPAHC6Ch .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-epwc3rDUUPAHC6Ch .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-epwc3rDUUPAHC6Ch .marker{fill:#333333;stroke:#333333;}#mermaid-svg-epwc3rDUUPAHC6Ch .marker.cross{stroke:#333333;}#mermaid-svg-epwc3rDUUPAHC6Ch svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-epwc3rDUUPAHC6Ch g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-epwc3rDUUPAHC6Ch g.classGroup text .title{font-weight:bolder;}#mermaid-svg-epwc3rDUUPAHC6Ch .nodeLabel,#mermaid-svg-epwc3rDUUPAHC6Ch .edgeLabel{color:#131300;}#mermaid-svg-epwc3rDUUPAHC6Ch .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-epwc3rDUUPAHC6Ch .label text{fill:#131300;}#mermaid-svg-epwc3rDUUPAHC6Ch .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-epwc3rDUUPAHC6Ch .classTitle{font-weight:bolder;}#mermaid-svg-epwc3rDUUPAHC6Ch .node rect,#mermaid-svg-epwc3rDUUPAHC6Ch .node circle,#mermaid-svg-epwc3rDUUPAHC6Ch .node ellipse,#mermaid-svg-epwc3rDUUPAHC6Ch .node polygon,#mermaid-svg-epwc3rDUUPAHC6Ch .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-epwc3rDUUPAHC6Ch .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-epwc3rDUUPAHC6Ch g.clickable{cursor:pointer;}#mermaid-svg-epwc3rDUUPAHC6Ch g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-epwc3rDUUPAHC6Ch g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-epwc3rDUUPAHC6Ch .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-epwc3rDUUPAHC6Ch .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-epwc3rDUUPAHC6Ch .dashed-line{stroke-dasharray:3;}#mermaid-svg-epwc3rDUUPAHC6Ch #compositionStart,#mermaid-svg-epwc3rDUUPAHC6Ch .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #compositionEnd,#mermaid-svg-epwc3rDUUPAHC6Ch .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #dependencyStart,#mermaid-svg-epwc3rDUUPAHC6Ch .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #dependencyStart,#mermaid-svg-epwc3rDUUPAHC6Ch .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #extensionStart,#mermaid-svg-epwc3rDUUPAHC6Ch .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #extensionEnd,#mermaid-svg-epwc3rDUUPAHC6Ch .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #aggregationStart,#mermaid-svg-epwc3rDUUPAHC6Ch .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch #aggregationEnd,#mermaid-svg-epwc3rDUUPAHC6Ch .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-epwc3rDUUPAHC6Ch .edgeTerminals{font-size:11px;}#mermaid-svg-epwc3rDUUPAHC6Ch :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Protagonist Name:string Friends:List SupportingRole 代码示例
package mainimport fmt// 定义主角类
type Protagonist struct {Name string//它的一个成员是配角的切片Friends []SupportingRole
}
//定义一个方法让配角加入主角的朋友此处为了演示方便和聚合关系无关
func (p *Protagonist) AddFriend(supportingRoleList ...SupportingRole) {p.Friends append(p.Friends, supportingRoleList...)
}
//定义一个方法查看主角此处为了演示方便和聚合关系无关
func (p *Protagonist) Get() {fmt.Printf(%v\n, p)
}
//定义配角类
type SupportingRole struct {Name string
}func main() {//实例化一个主角——刘备liuBei : Protagonist{Name: 刘备,}//实例化两个配角——关羽、张飞guanYu : SupportingRole{Name: 关羽,}zhangFei : SupportingRole{Name: 张飞,}//将关羽、张飞加入刘备的朋友liuBei.AddFriend(guanYu, zhangFei)//查看刘备的信息liuBei.Get()
}
输出
{Name:刘备 Friends:[{Name:关羽} {Name:张飞}]}2.2 组合Composition
概念
是关联关系的一种表示一种强的“拥有”关系。 如人之于头、脚汽车之于驾驶室、发动机体现了严格的部分和整体的关系部分和整体的生命周期一样
类图示例 人的组成部分包括头它们的实例有相同的生命周期 #mermaid-svg-kFiJE238nYcTWCRL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kFiJE238nYcTWCRL .error-icon{fill:#552222;}#mermaid-svg-kFiJE238nYcTWCRL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kFiJE238nYcTWCRL .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kFiJE238nYcTWCRL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kFiJE238nYcTWCRL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kFiJE238nYcTWCRL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kFiJE238nYcTWCRL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kFiJE238nYcTWCRL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kFiJE238nYcTWCRL .marker.cross{stroke:#333333;}#mermaid-svg-kFiJE238nYcTWCRL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kFiJE238nYcTWCRL g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-kFiJE238nYcTWCRL g.classGroup text .title{font-weight:bolder;}#mermaid-svg-kFiJE238nYcTWCRL .nodeLabel,#mermaid-svg-kFiJE238nYcTWCRL .edgeLabel{color:#131300;}#mermaid-svg-kFiJE238nYcTWCRL .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-kFiJE238nYcTWCRL .label text{fill:#131300;}#mermaid-svg-kFiJE238nYcTWCRL .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-kFiJE238nYcTWCRL .classTitle{font-weight:bolder;}#mermaid-svg-kFiJE238nYcTWCRL .node rect,#mermaid-svg-kFiJE238nYcTWCRL .node circle,#mermaid-svg-kFiJE238nYcTWCRL .node ellipse,#mermaid-svg-kFiJE238nYcTWCRL .node polygon,#mermaid-svg-kFiJE238nYcTWCRL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kFiJE238nYcTWCRL .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-kFiJE238nYcTWCRL g.clickable{cursor:pointer;}#mermaid-svg-kFiJE238nYcTWCRL g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-kFiJE238nYcTWCRL g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-kFiJE238nYcTWCRL .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-kFiJE238nYcTWCRL .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-kFiJE238nYcTWCRL .dashed-line{stroke-dasharray:3;}#mermaid-svg-kFiJE238nYcTWCRL #compositionStart,#mermaid-svg-kFiJE238nYcTWCRL .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #compositionEnd,#mermaid-svg-kFiJE238nYcTWCRL .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #dependencyStart,#mermaid-svg-kFiJE238nYcTWCRL .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #dependencyStart,#mermaid-svg-kFiJE238nYcTWCRL .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #extensionStart,#mermaid-svg-kFiJE238nYcTWCRL .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #extensionEnd,#mermaid-svg-kFiJE238nYcTWCRL .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #aggregationStart,#mermaid-svg-kFiJE238nYcTWCRL .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL #aggregationEnd,#mermaid-svg-kFiJE238nYcTWCRL .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kFiJE238nYcTWCRL .edgeTerminals{font-size:11px;}#mermaid-svg-kFiJE238nYcTWCRL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Person Head:Head Hand:String Head 因为他也是一种特殊的关联关系因此可以画成 #mermaid-svg-kK2d7jpBaSiMLzTP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kK2d7jpBaSiMLzTP .error-icon{fill:#552222;}#mermaid-svg-kK2d7jpBaSiMLzTP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kK2d7jpBaSiMLzTP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kK2d7jpBaSiMLzTP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kK2d7jpBaSiMLzTP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kK2d7jpBaSiMLzTP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kK2d7jpBaSiMLzTP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kK2d7jpBaSiMLzTP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kK2d7jpBaSiMLzTP .marker.cross{stroke:#333333;}#mermaid-svg-kK2d7jpBaSiMLzTP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kK2d7jpBaSiMLzTP g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-kK2d7jpBaSiMLzTP g.classGroup text .title{font-weight:bolder;}#mermaid-svg-kK2d7jpBaSiMLzTP .nodeLabel,#mermaid-svg-kK2d7jpBaSiMLzTP .edgeLabel{color:#131300;}#mermaid-svg-kK2d7jpBaSiMLzTP .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-kK2d7jpBaSiMLzTP .label text{fill:#131300;}#mermaid-svg-kK2d7jpBaSiMLzTP .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-kK2d7jpBaSiMLzTP .classTitle{font-weight:bolder;}#mermaid-svg-kK2d7jpBaSiMLzTP .node rect,#mermaid-svg-kK2d7jpBaSiMLzTP .node circle,#mermaid-svg-kK2d7jpBaSiMLzTP .node ellipse,#mermaid-svg-kK2d7jpBaSiMLzTP .node polygon,#mermaid-svg-kK2d7jpBaSiMLzTP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kK2d7jpBaSiMLzTP .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-kK2d7jpBaSiMLzTP g.clickable{cursor:pointer;}#mermaid-svg-kK2d7jpBaSiMLzTP g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-kK2d7jpBaSiMLzTP g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-kK2d7jpBaSiMLzTP .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-kK2d7jpBaSiMLzTP .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-kK2d7jpBaSiMLzTP .dashed-line{stroke-dasharray:3;}#mermaid-svg-kK2d7jpBaSiMLzTP #compositionStart,#mermaid-svg-kK2d7jpBaSiMLzTP .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #compositionEnd,#mermaid-svg-kK2d7jpBaSiMLzTP .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #dependencyStart,#mermaid-svg-kK2d7jpBaSiMLzTP .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #dependencyStart,#mermaid-svg-kK2d7jpBaSiMLzTP .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #extensionStart,#mermaid-svg-kK2d7jpBaSiMLzTP .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #extensionEnd,#mermaid-svg-kK2d7jpBaSiMLzTP .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #aggregationStart,#mermaid-svg-kK2d7jpBaSiMLzTP .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP #aggregationEnd,#mermaid-svg-kK2d7jpBaSiMLzTP .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kK2d7jpBaSiMLzTP .edgeTerminals{font-size:11px;}#mermaid-svg-kK2d7jpBaSiMLzTP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Person Head:Head Hand:String Head 代码示例
package mainimport fmt
//定义一个类——人
type Person struct {Name string//他有一个成员是头Head Head
}
//定义一个类——头
type Head struct {weight float64
}
//写一个函数用来实例化一个具体的人这样保证了人和头的生命周期一致。实际操作中可以写一个工厂
func CreatePerson(name string, headWeight float64) (person *Person) {person Person{Name: name,Head: Head{weight: headWeight,},}return person
}func main() {//实例化一个人——颜良八斤半的头留给关羽摘吧yanLiang : CreatePerson(颜良, 8.5)fmt.Printf(%v, yanLiang)
}
输出
{Name:颜良 Head:{weight:8.5}}3. 实现和泛化代码的重用
3.1 实现Realization
概念
体现为类对接口的实现 比如接口人有工作方法其泛化类男人、女人都可以实现该接口的工作方法
类图示例 如概念中所述男人和女人都实现了接口人的工作方法 #mermaid-svg-kMHd85755WmfO0Sh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kMHd85755WmfO0Sh .error-icon{fill:#552222;}#mermaid-svg-kMHd85755WmfO0Sh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kMHd85755WmfO0Sh .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kMHd85755WmfO0Sh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kMHd85755WmfO0Sh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kMHd85755WmfO0Sh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kMHd85755WmfO0Sh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kMHd85755WmfO0Sh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kMHd85755WmfO0Sh .marker.cross{stroke:#333333;}#mermaid-svg-kMHd85755WmfO0Sh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kMHd85755WmfO0Sh g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-kMHd85755WmfO0Sh g.classGroup text .title{font-weight:bolder;}#mermaid-svg-kMHd85755WmfO0Sh .nodeLabel,#mermaid-svg-kMHd85755WmfO0Sh .edgeLabel{color:#131300;}#mermaid-svg-kMHd85755WmfO0Sh .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-kMHd85755WmfO0Sh .label text{fill:#131300;}#mermaid-svg-kMHd85755WmfO0Sh .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-kMHd85755WmfO0Sh .classTitle{font-weight:bolder;}#mermaid-svg-kMHd85755WmfO0Sh .node rect,#mermaid-svg-kMHd85755WmfO0Sh .node circle,#mermaid-svg-kMHd85755WmfO0Sh .node ellipse,#mermaid-svg-kMHd85755WmfO0Sh .node polygon,#mermaid-svg-kMHd85755WmfO0Sh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kMHd85755WmfO0Sh .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-kMHd85755WmfO0Sh g.clickable{cursor:pointer;}#mermaid-svg-kMHd85755WmfO0Sh g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-kMHd85755WmfO0Sh g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-kMHd85755WmfO0Sh .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-kMHd85755WmfO0Sh .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-kMHd85755WmfO0Sh .dashed-line{stroke-dasharray:3;}#mermaid-svg-kMHd85755WmfO0Sh #compositionStart,#mermaid-svg-kMHd85755WmfO0Sh .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #compositionEnd,#mermaid-svg-kMHd85755WmfO0Sh .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #dependencyStart,#mermaid-svg-kMHd85755WmfO0Sh .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #dependencyStart,#mermaid-svg-kMHd85755WmfO0Sh .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #extensionStart,#mermaid-svg-kMHd85755WmfO0Sh .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #extensionEnd,#mermaid-svg-kMHd85755WmfO0Sh .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #aggregationStart,#mermaid-svg-kMHd85755WmfO0Sh .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh #aggregationEnd,#mermaid-svg-kMHd85755WmfO0Sh .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-kMHd85755WmfO0Sh .edgeTerminals{font-size:11px;}#mermaid-svg-kMHd85755WmfO0Sh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} «interface» Person Work() Man Work() Woman Work() 因为是一种弱关系因此我们可以看到是虚线链接 代码示例
package mainimport (fmt
)
//定义一个人的接口
type Person interface {Work()
}
//定义男人类是接口人的实现
type Man struct {Name string
}func (m *Man) Work() {fmt.Println(男人, m.Name, 开心的工作中)
}
//定义女人类是接口人的实现
type Woman struct {Name string
}func (w *Woman) Work() {fmt.Println(女人, w.Name, 开心的工作中)
}
//定义一个函数实例化具体的人实际代码中我们可以写成一个工厂
func CreatePerson(name string, sex string) Person {switch sex {case man:return Man{Name: name,}case woman:return Woman{Name: name,}default:return nil}
}func main() {CreatePerson(周瑜, man).Work()CreatePerson(小乔, woman).Work()}输出
男人 周瑜 开心的工作中
女人 小乔 开心的工作中3.2 泛化Generalization
概念
是继承的逆向关系子类是父类的泛化。 男人和女人也可以抽象出人类此时男人和女人是人类的泛化。
类图示例 男人是人的泛化不但继承了人的还拥有胡子 #mermaid-svg-4qkMDbdDBvtthcLw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4qkMDbdDBvtthcLw .error-icon{fill:#552222;}#mermaid-svg-4qkMDbdDBvtthcLw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4qkMDbdDBvtthcLw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-4qkMDbdDBvtthcLw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4qkMDbdDBvtthcLw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4qkMDbdDBvtthcLw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4qkMDbdDBvtthcLw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4qkMDbdDBvtthcLw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4qkMDbdDBvtthcLw .marker.cross{stroke:#333333;}#mermaid-svg-4qkMDbdDBvtthcLw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4qkMDbdDBvtthcLw g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-4qkMDbdDBvtthcLw g.classGroup text .title{font-weight:bolder;}#mermaid-svg-4qkMDbdDBvtthcLw .nodeLabel,#mermaid-svg-4qkMDbdDBvtthcLw .edgeLabel{color:#131300;}#mermaid-svg-4qkMDbdDBvtthcLw .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-4qkMDbdDBvtthcLw .label text{fill:#131300;}#mermaid-svg-4qkMDbdDBvtthcLw .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-4qkMDbdDBvtthcLw .classTitle{font-weight:bolder;}#mermaid-svg-4qkMDbdDBvtthcLw .node rect,#mermaid-svg-4qkMDbdDBvtthcLw .node circle,#mermaid-svg-4qkMDbdDBvtthcLw .node ellipse,#mermaid-svg-4qkMDbdDBvtthcLw .node polygon,#mermaid-svg-4qkMDbdDBvtthcLw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4qkMDbdDBvtthcLw .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-4qkMDbdDBvtthcLw g.clickable{cursor:pointer;}#mermaid-svg-4qkMDbdDBvtthcLw g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-4qkMDbdDBvtthcLw g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-4qkMDbdDBvtthcLw .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-4qkMDbdDBvtthcLw .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-4qkMDbdDBvtthcLw .dashed-line{stroke-dasharray:3;}#mermaid-svg-4qkMDbdDBvtthcLw #compositionStart,#mermaid-svg-4qkMDbdDBvtthcLw .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #compositionEnd,#mermaid-svg-4qkMDbdDBvtthcLw .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #dependencyStart,#mermaid-svg-4qkMDbdDBvtthcLw .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #dependencyStart,#mermaid-svg-4qkMDbdDBvtthcLw .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #extensionStart,#mermaid-svg-4qkMDbdDBvtthcLw .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #extensionEnd,#mermaid-svg-4qkMDbdDBvtthcLw .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #aggregationStart,#mermaid-svg-4qkMDbdDBvtthcLw .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw #aggregationEnd,#mermaid-svg-4qkMDbdDBvtthcLw .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-4qkMDbdDBvtthcLw .edgeTerminals{font-size:11px;}#mermaid-svg-4qkMDbdDBvtthcLw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Person Name:String Head:String Man Person:Person Beard:String 代码示例
package mainimport fmt
//定义一个类——人
type Person struct {Head stringBody string
}
//定义人的方法用来设置人的属性
func (p *Person) SetPerson(head string, body string) {p.Head headp.Body body
}
//定义一个男人类它是人的泛化即它继承了人
type Man struct {PersonBear string
}
//定义一个男人的方法用来设置男人的属性
func (m *Man) SetMan(bear string) {m.Bear bear
}func main() {//实例化一个男人——关羽guanYu : Man{}//设置关羽人的属性guanYu.SetPerson(大头红脸, 身高九尺)//设置关羽男人的属性guanYu.SetMan(长胡子)//查看结果fmt.Printf(%v, guanYu)
}结果输出
{Person:{Head:大头红脸 Body:身高九尺} Bear:长胡子}