工厂模式类图
工廠模式
簡單工廠模式
? 定義:由一個工廠決定創建出哪一個產品類的實例
? 優點:增加一個產品只需要對簡單工廠進行修改
類圖:
-
初始
#mermaid-svg-VKqvFGtPRZbDmzi7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-VKqvFGtPRZbDmzi7 .error-icon{fill:#552222;}#mermaid-svg-VKqvFGtPRZbDmzi7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VKqvFGtPRZbDmzi7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VKqvFGtPRZbDmzi7 .marker.cross{stroke:#333333;}#mermaid-svg-VKqvFGtPRZbDmzi7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VKqvFGtPRZbDmzi7 g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-VKqvFGtPRZbDmzi7 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-VKqvFGtPRZbDmzi7 .nodeLabel,#mermaid-svg-VKqvFGtPRZbDmzi7 .edgeLabel{color:#131300;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-VKqvFGtPRZbDmzi7 .label text{fill:#131300;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-VKqvFGtPRZbDmzi7 .classTitle{font-weight:bolder;}#mermaid-svg-VKqvFGtPRZbDmzi7 .node rect,#mermaid-svg-VKqvFGtPRZbDmzi7 .node circle,#mermaid-svg-VKqvFGtPRZbDmzi7 .node ellipse,#mermaid-svg-VKqvFGtPRZbDmzi7 .node polygon,#mermaid-svg-VKqvFGtPRZbDmzi7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VKqvFGtPRZbDmzi7 .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 g.clickable{cursor:pointer;}#mermaid-svg-VKqvFGtPRZbDmzi7 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-VKqvFGtPRZbDmzi7 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-VKqvFGtPRZbDmzi7 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-VKqvFGtPRZbDmzi7 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-VKqvFGtPRZbDmzi7 .dashed-line{stroke-dasharray:3;}#mermaid-svg-VKqvFGtPRZbDmzi7 #compositionStart,#mermaid-svg-VKqvFGtPRZbDmzi7 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #compositionEnd,#mermaid-svg-VKqvFGtPRZbDmzi7 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #dependencyStart,#mermaid-svg-VKqvFGtPRZbDmzi7 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #dependencyStart,#mermaid-svg-VKqvFGtPRZbDmzi7 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #extensionStart,#mermaid-svg-VKqvFGtPRZbDmzi7 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #extensionEnd,#mermaid-svg-VKqvFGtPRZbDmzi7 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #aggregationStart,#mermaid-svg-VKqvFGtPRZbDmzi7 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 #aggregationEnd,#mermaid-svg-VKqvFGtPRZbDmzi7 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VKqvFGtPRZbDmzi7 .edgeTerminals{font-size:11px;}#mermaid-svg-VKqvFGtPRZbDmzi7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Pizza+prepare() : void+bake() : void+cut() : void+box() : voidChessPizzaGreekPizzaOrderPizzaPizzaStore -
簡單工廠
#mermaid-svg-tc80LeYMEVTcuX5H {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tc80LeYMEVTcuX5H .error-icon{fill:#552222;}#mermaid-svg-tc80LeYMEVTcuX5H .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tc80LeYMEVTcuX5H .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-tc80LeYMEVTcuX5H .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tc80LeYMEVTcuX5H .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tc80LeYMEVTcuX5H .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tc80LeYMEVTcuX5H .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tc80LeYMEVTcuX5H .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tc80LeYMEVTcuX5H .marker.cross{stroke:#333333;}#mermaid-svg-tc80LeYMEVTcuX5H svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tc80LeYMEVTcuX5H g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-tc80LeYMEVTcuX5H g.classGroup text .title{font-weight:bolder;}#mermaid-svg-tc80LeYMEVTcuX5H .nodeLabel,#mermaid-svg-tc80LeYMEVTcuX5H .edgeLabel{color:#131300;}#mermaid-svg-tc80LeYMEVTcuX5H .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-tc80LeYMEVTcuX5H .label text{fill:#131300;}#mermaid-svg-tc80LeYMEVTcuX5H .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-tc80LeYMEVTcuX5H .classTitle{font-weight:bolder;}#mermaid-svg-tc80LeYMEVTcuX5H .node rect,#mermaid-svg-tc80LeYMEVTcuX5H .node circle,#mermaid-svg-tc80LeYMEVTcuX5H .node ellipse,#mermaid-svg-tc80LeYMEVTcuX5H .node polygon,#mermaid-svg-tc80LeYMEVTcuX5H .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tc80LeYMEVTcuX5H .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-tc80LeYMEVTcuX5H g.clickable{cursor:pointer;}#mermaid-svg-tc80LeYMEVTcuX5H g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-tc80LeYMEVTcuX5H g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-tc80LeYMEVTcuX5H .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-tc80LeYMEVTcuX5H .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-tc80LeYMEVTcuX5H .dashed-line{stroke-dasharray:3;}#mermaid-svg-tc80LeYMEVTcuX5H #compositionStart,#mermaid-svg-tc80LeYMEVTcuX5H .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #compositionEnd,#mermaid-svg-tc80LeYMEVTcuX5H .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #dependencyStart,#mermaid-svg-tc80LeYMEVTcuX5H .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #dependencyStart,#mermaid-svg-tc80LeYMEVTcuX5H .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #extensionStart,#mermaid-svg-tc80LeYMEVTcuX5H .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #extensionEnd,#mermaid-svg-tc80LeYMEVTcuX5H .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #aggregationStart,#mermaid-svg-tc80LeYMEVTcuX5H .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H #aggregationEnd,#mermaid-svg-tc80LeYMEVTcuX5H .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tc80LeYMEVTcuX5H .edgeTerminals{font-size:11px;}#mermaid-svg-tc80LeYMEVTcuX5H :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Pizza+prepare()+bake()+cut()+box()ChessPizzaGreekPizzaOrderPizzaSimpleFactory
工廠模式
? 定義:將工廠進行抽象,解決簡單工廠只能單一工廠的問題
? 優點:工廠也可也創建多個
類圖:
#mermaid-svg-jnna5pPCXrIxI4ly {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jnna5pPCXrIxI4ly .error-icon{fill:#552222;}#mermaid-svg-jnna5pPCXrIxI4ly .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jnna5pPCXrIxI4ly .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jnna5pPCXrIxI4ly .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jnna5pPCXrIxI4ly .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jnna5pPCXrIxI4ly .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jnna5pPCXrIxI4ly .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jnna5pPCXrIxI4ly .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jnna5pPCXrIxI4ly .marker.cross{stroke:#333333;}#mermaid-svg-jnna5pPCXrIxI4ly svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jnna5pPCXrIxI4ly g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-jnna5pPCXrIxI4ly g.classGroup text .title{font-weight:bolder;}#mermaid-svg-jnna5pPCXrIxI4ly .nodeLabel,#mermaid-svg-jnna5pPCXrIxI4ly .edgeLabel{color:#131300;}#mermaid-svg-jnna5pPCXrIxI4ly .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-jnna5pPCXrIxI4ly .label text{fill:#131300;}#mermaid-svg-jnna5pPCXrIxI4ly .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-jnna5pPCXrIxI4ly .classTitle{font-weight:bolder;}#mermaid-svg-jnna5pPCXrIxI4ly .node rect,#mermaid-svg-jnna5pPCXrIxI4ly .node circle,#mermaid-svg-jnna5pPCXrIxI4ly .node ellipse,#mermaid-svg-jnna5pPCXrIxI4ly .node polygon,#mermaid-svg-jnna5pPCXrIxI4ly .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jnna5pPCXrIxI4ly .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-jnna5pPCXrIxI4ly g.clickable{cursor:pointer;}#mermaid-svg-jnna5pPCXrIxI4ly g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-jnna5pPCXrIxI4ly g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-jnna5pPCXrIxI4ly .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-jnna5pPCXrIxI4ly .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-jnna5pPCXrIxI4ly .dashed-line{stroke-dasharray:3;}#mermaid-svg-jnna5pPCXrIxI4ly #compositionStart,#mermaid-svg-jnna5pPCXrIxI4ly .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #compositionEnd,#mermaid-svg-jnna5pPCXrIxI4ly .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #dependencyStart,#mermaid-svg-jnna5pPCXrIxI4ly .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #dependencyStart,#mermaid-svg-jnna5pPCXrIxI4ly .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #extensionStart,#mermaid-svg-jnna5pPCXrIxI4ly .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #extensionEnd,#mermaid-svg-jnna5pPCXrIxI4ly .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #aggregationStart,#mermaid-svg-jnna5pPCXrIxI4ly .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly #aggregationEnd,#mermaid-svg-jnna5pPCXrIxI4ly .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jnna5pPCXrIxI4ly .edgeTerminals{font-size:11px;}#mermaid-svg-jnna5pPCXrIxI4ly :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Pizza+prepare()+bake()+cut()+box()BJCheesePizzaBJPepperPizzaLondonCheesePizzaLondonPepperPizzaOrderPizza+createPizza()BJOrderPizzaLondonOrderPizza抽象工廠模式
? 定義:一個抽象工廠接口,多個工廠子類,外部聚合抽象工廠接口即可(所有屬性下沉到抽象工廠類)
類圖:
#mermaid-svg-dqu3g4tUsk4Y1P1A {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dqu3g4tUsk4Y1P1A .error-icon{fill:#552222;}#mermaid-svg-dqu3g4tUsk4Y1P1A .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dqu3g4tUsk4Y1P1A .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dqu3g4tUsk4Y1P1A .marker.cross{stroke:#333333;}#mermaid-svg-dqu3g4tUsk4Y1P1A svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dqu3g4tUsk4Y1P1A g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-dqu3g4tUsk4Y1P1A g.classGroup text .title{font-weight:bolder;}#mermaid-svg-dqu3g4tUsk4Y1P1A .nodeLabel,#mermaid-svg-dqu3g4tUsk4Y1P1A .edgeLabel{color:#131300;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-dqu3g4tUsk4Y1P1A .label text{fill:#131300;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-dqu3g4tUsk4Y1P1A .classTitle{font-weight:bolder;}#mermaid-svg-dqu3g4tUsk4Y1P1A .node rect,#mermaid-svg-dqu3g4tUsk4Y1P1A .node circle,#mermaid-svg-dqu3g4tUsk4Y1P1A .node ellipse,#mermaid-svg-dqu3g4tUsk4Y1P1A .node polygon,#mermaid-svg-dqu3g4tUsk4Y1P1A .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dqu3g4tUsk4Y1P1A .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A g.clickable{cursor:pointer;}#mermaid-svg-dqu3g4tUsk4Y1P1A g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-dqu3g4tUsk4Y1P1A g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-dqu3g4tUsk4Y1P1A .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-dqu3g4tUsk4Y1P1A .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-dqu3g4tUsk4Y1P1A .dashed-line{stroke-dasharray:3;}#mermaid-svg-dqu3g4tUsk4Y1P1A #compositionStart,#mermaid-svg-dqu3g4tUsk4Y1P1A .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #compositionEnd,#mermaid-svg-dqu3g4tUsk4Y1P1A .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #dependencyStart,#mermaid-svg-dqu3g4tUsk4Y1P1A .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #dependencyStart,#mermaid-svg-dqu3g4tUsk4Y1P1A .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #extensionStart,#mermaid-svg-dqu3g4tUsk4Y1P1A .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #extensionEnd,#mermaid-svg-dqu3g4tUsk4Y1P1A .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #aggregationStart,#mermaid-svg-dqu3g4tUsk4Y1P1A .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A #aggregationEnd,#mermaid-svg-dqu3g4tUsk4Y1P1A .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dqu3g4tUsk4Y1P1A .edgeTerminals{font-size:11px;}#mermaid-svg-dqu3g4tUsk4Y1P1A :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Pizza+prepare()+bake()+cut()+box()BJCheesePizzaBJPepperPizzaLondonCheesePizzaLondonPepperPizzaOrderPizzaBJFactoryLondonFactory?Interface?AbstractFactory+createPizza() : Pizza應用
? JDK源碼:Calendar
總結
- 上一篇: 均匀分布(Uniform distrib
- 下一篇: CSDN豪华盲盒, 一发入魂直接获得iP