Skip to content

Commit e436009

Browse files
committed
uml图 6大设计原则
1 parent e5dfe39 commit e436009

28 files changed

+258
-49
lines changed

.gitignore

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Compiled class file
2+
*.class
3+
target/
4+
5+
# Log file
6+
*.log
7+
8+
# BlueJ files
9+
*.ctxt
10+
11+
# Mobile Tools for Java (J2ME)
12+
.mtj.tmp/
13+
14+
# Package Files #
15+
*.jar
16+
*.war
17+
*.nar
18+
*.ear
19+
*.zip
20+
*.tar.gz
21+
*.rar
22+
23+
# idea
24+
.idea/
25+
26+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
27+
hs_err_pid*
28+
29+
# iml
30+
*.iml

README.md

+118-5
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1-
## design pattern 参考《大话设计模式》
2-
### 创建型模式
1+
参考《大话设计模式》
2+
3+
# 23种设计模式
4+
5+
**创建型模式**
6+
37
- [简单工厂模式](src/designpattern/creation/factory/simple/Calculator.java)
48
- [工厂方法模式](src/designpattern/creation/factory/method/FactoryClient.java)
59
- [抽象工厂模式](src/designpattern/creation/factory/abstraction/Client.java)
610
- [原型模式](src/designpattern/creation/prototype/PrototypeClient.java)
711
- [建造者模式](src/designpattern/creation/builder/BuilderClient.java)
812
- [单例模式](src/designpattern/creation/singleton/SingletonClient.java)
9-
### 结构型模式
13+
14+
**结构型模式**
15+
1016
- [适配器模式](src/designpattern/structural/adapter/AdapterClient.java)
1117
- [桥接模式](src/designpattern/structural/bridge/BridgeClient.java)
1218
- [组合模式](src/designpattern/structural/composite/CompositeClient.java)
1319
- [装饰模式](src/designpattern/structural/decorator/DecoratorClient.java)
1420
- [外观模式](src/designpattern/structural/facade/FacadeClient.java)
1521
- [享元模式](src/designpattern/structural/flyweight/FlyWeightClient.java)
1622
- [代理模式](src/designpattern/structural/proxy/ProxyClient.java)
17-
### 行为模式(类行为型模式)
23+
24+
**行为模式(类行为型模式)**
25+
1826
- [解释器模式](src/designpattern/behavioral/interpreter/InterpreterClient.java)
1927
- [模板方法模式](src/designpattern/behavioral/template/TemplateClient.java)
20-
### 行为模式(对象行为型模式)
28+
29+
**行为模式(对象行为型模式)**
30+
2131
- [策略模式](src/designpattern/behavioral/strategy/StrategyClient.java)
2232
- [观察者模式](src/designpattern/behavioral/observer/ObserverClient.java)
2333
- [状态模式](src/designpattern/behavioral/state/StateClient.java)
@@ -27,3 +37,106 @@
2737
- [职责链模式](src/designpattern/behavioral/responsibilitychain/Client.java)
2838
- [中介者模式](src/designpattern/behavioral/mediator/MediatorClient.java)
2939
- [访问者模式](src/designpattern/behavioral/visitor/VisitorClient.java)
40+
41+
# 程序设计6大原则
42+
43+
- 单一职责原则(SRP)
44+
45+
就一个类而言,应该仅有一个引起它变化的原因。
46+
47+
- 里氏替换原则(LSP)
48+
49+
子类型必须能够替换掉它们的父类型。
50+
51+
- 接口隔离原则
52+
53+
接口最小化原则
54+
55+
- 依赖倒置原则
56+
57+
高层模块不应该依赖低层模块,两个都应该依赖抽象;<br>抽象不应该依赖细节,细节应该依赖抽象;
58+
59+
- 迪米特原则(LoD)
60+
61+
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
62+
63+
- 开闭原则
64+
65+
软件实现(类、模块、函数等等)应该可以扩展,但是不可修改。
66+
67+
# UML类图和类之间的关系
68+
69+
**UML 类图**
70+
71+
-
72+
73+
![](images/wpsED7E.tmp.jpg)
74+
75+
类图分三层:
76+
77+
第一层显示类的名称,如果是抽象类,则就用斜体显示。<br>第二层是类的特性,通常就是字段和属性。<br>第三层是类的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected.
78+
79+
- 接口类
80+
81+
![](images/wpsED7F.tmp.jpg)
82+
83+
第一行是接口名称。第二行是接口方法。
84+
85+
**类之间的关系**
86+
87+
- 01继承类
88+
89+
继承关系用空心三角形 + 实线来表示。
90+
91+
![](images/wpsED91.tmp.jpg)
92+
93+
- 02实现接口类
94+
95+
实现接口用空心三角形 + 虚线来表示。
96+
97+
![](images/wpsEDA1.tmp.jpg)
98+
99+
- 03关联关系
100+
101+
关联关系用实际箭头来表示。
102+
103+
![](images/wpsEDA2.tmp.jpg)
104+
105+
看企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。当一个类知道另一个类时,可以用关联(association)。
106+
107+
- 04聚合关系
108+
109+
聚合关系用空心的菱形 + 实绩箭头来表示。
110+
111+
我们再来看大雁与雁群这两个类。
112+
113+
<img src="images/wpsEDB3.tmp.jpg" style="zoom:80%;" />
114+
115+
![](images/wpsEDB4.tmp.jpg)
116+
117+
- 05组合关系
118+
119+
用实心的菱形 + 实心箭头来表示。
120+
121+
组合关系是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
122+
123+
![](images/wpsEDC5.tmp.jpg)
124+
125+
在这里鸟和其翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。
126+
127+
另外,你会注意到合成关系的连线两端还有一个数字‘1’和数字‘2’,这被称为基数。
128+
129+
表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。
130+
131+
如果一个类可能有无数个实例,则就用‘n’来表示。
132+
133+
- 06依赖关系
134+
135+
动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。
136+
137+
也就是说,动物依赖于氧气和水。它们之间是依赖关系(Dependency),用虚线箭头来表示。
138+
139+
![](images/wpsEDC6.tmp.jpg)
140+
141+
![](images/wpsEDD6.tmp.jpg)
142+

images/wps11B6.tmp.jpg

67.1 KB
Loading

images/wps3740.tmp.jpg

21.9 KB
Loading

images/wps54E0.tmp.jpg

83.7 KB
Loading

images/wpsB485.tmp.jpg

109 KB
Loading

images/wpsD52E.tmp.jpg

71.3 KB
Loading

images/wpsED7E.tmp.jpg

18.2 KB
Loading

images/wpsED7F.tmp.jpg

24.8 KB
Loading

images/wpsED91.tmp.jpg

32.8 KB
Loading

images/wpsEDA1.tmp.jpg

20.5 KB
Loading

images/wpsEDA2.tmp.jpg

58.6 KB
Loading

images/wpsEDB3.tmp.jpg

38.4 KB
Loading

images/wpsEDB4.tmp.jpg

41.1 KB
Loading

images/wpsEDC5.tmp.jpg

52.9 KB
Loading

images/wpsEDC6.tmp.jpg

49.3 KB
Loading

images/wpsEDD6.tmp.jpg

31.4 KB
Loading

images/配置器模式UML.jpg

32 KB
Loading

src/designpattern/creation/factory/abstraction/Client.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
* @author yangll
99
*/
1010
public class Client {
11-
public static void main(String[] args) throws InstantiationException,
12-
IllegalAccessException {
11+
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
1312
Operation operation = OperationFactory.createOperation("/");
1413

1514
operation.numberA = 7;

src/designpattern/creation/factory/abstraction/OperationFactory.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ public class OperationFactory {
2020
allOperationMaps.put("/", OperationDiv.class);
2121
}
2222

23-
public static Operation createOperation(String operator)
24-
throws InstantiationException, IllegalAccessException {
23+
public static Operation createOperation(String operator) throws InstantiationException, IllegalAccessException {
2524
Operation operation;
2625

2726
Class<?> operationClass = allOperationMaps.get(operator);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package designpattern.creation.factory.method;
2+
3+
import designpattern.creation.factory.simple.Operation;
4+
import designpattern.creation.factory.simple.OperationAdd;
5+
6+
public class AddFactory implements IFactory {
7+
8+
@Override
9+
public Operation createOperation() {
10+
return new OperationAdd();
11+
}
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package designpattern.creation.factory.method;
2+
3+
import designpattern.creation.factory.simple.Operation;
4+
import designpattern.creation.factory.simple.OperationDiv;
5+
6+
public class DivFactory implements IFactory {
7+
8+
@Override
9+
public Operation createOperation() {
10+
return new OperationDiv();
11+
}
12+
13+
}

src/designpattern/creation/factory/method/FactoryClient.java

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* @author yangll
99
*/
1010
public class FactoryClient {
11+
1112
public static void main(String[] args) {
1213
IFactory operFactory = new DivFactory();
1314
Operation operation = operFactory.createOperation();
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,12 @@
11
package designpattern.creation.factory.method;
22

3-
import designpattern.creation.factory.simple.*;
3+
import designpattern.creation.factory.simple.Operation;
44

55
/**
66
* 工厂接口
77
*
88
* @author yangll
99
*/
1010
public interface IFactory {
11-
public Operation createOperation();
12-
}
13-
14-
class AddFactory implements IFactory {
15-
16-
@Override
17-
public Operation createOperation() {
18-
return new OperationAdd();
19-
}
20-
21-
}
22-
23-
class SubFactory implements IFactory {
24-
25-
@Override
26-
public Operation createOperation() {
27-
return new OperationSub();
28-
}
29-
30-
}
31-
32-
class MulFactory implements IFactory {
33-
34-
@Override
35-
public Operation createOperation() {
36-
return new OperationMul();
37-
}
38-
39-
}
40-
41-
class DivFactory implements IFactory {
42-
43-
@Override
44-
public Operation createOperation() {
45-
return new OperationDiv();
46-
}
47-
48-
}
11+
Operation createOperation();
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Diagram>
3+
<ID>JAVA</ID>
4+
<OriginalElement>designpattern.creation.factory.method.IFactory</OriginalElement>
5+
<nodes>
6+
<node x="762.0" y="103.0">designpattern.creation.factory.method.AddFactory</node>
7+
<node x="381.0" y="0.0">designpattern.creation.factory.method.IFactory</node>
8+
<node x="508.0" y="103.0">designpattern.creation.factory.method.DivFactory</node>
9+
<node x="0.0" y="201.0">designpattern.creation.factory.method.FactoryClient</node>
10+
<node x="254.0" y="103.0">designpattern.creation.factory.method.SubFactory</node>
11+
<node x="0.0" y="103.0">designpattern.creation.factory.method.MulFactory</node>
12+
</nodes>
13+
<notes />
14+
<edges>
15+
<edge source="designpattern.creation.factory.method.SubFactory" target="designpattern.creation.factory.method.IFactory">
16+
<point x="0.0" y="-26.5" />
17+
<point x="371.0" y="83.0" />
18+
<point x="468.75" y="83.0" />
19+
<point x="-29.25" y="26.5" />
20+
</edge>
21+
<edge source="designpattern.creation.factory.method.DivFactory" target="designpattern.creation.factory.method.IFactory">
22+
<point x="0.0" y="-26.5" />
23+
<point x="625.0" y="83.0" />
24+
<point x="527.25" y="83.0" />
25+
<point x="29.25" y="26.5" />
26+
</edge>
27+
<edge source="designpattern.creation.factory.method.AddFactory" target="designpattern.creation.factory.method.IFactory">
28+
<point x="0.0" y="-26.5" />
29+
<point x="879.0" y="73.0" />
30+
<point x="585.75" y="73.0" />
31+
<point x="87.75" y="26.5" />
32+
</edge>
33+
<edge source="designpattern.creation.factory.method.MulFactory" target="designpattern.creation.factory.method.IFactory">
34+
<point x="0.0" y="-26.5" />
35+
<point x="117.0" y="73.0" />
36+
<point x="410.25" y="73.0" />
37+
<point x="-87.75" y="26.5" />
38+
</edge>
39+
</edges>
40+
<settings layout="Hierarchic Group" zoom="1.0" x="258.0" y="15.0" />
41+
<SelectedNodes>
42+
<node>designpattern.creation.factory.method.FactoryClient</node>
43+
</SelectedNodes>
44+
<Categories>
45+
<Category>Fields</Category>
46+
<Category>Methods</Category>
47+
</Categories>
48+
<SCOPE>All</SCOPE>
49+
<VISIBILITY>public</VISIBILITY>
50+
</Diagram>
51+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package designpattern.creation.factory.method;
2+
3+
import designpattern.creation.factory.simple.Operation;
4+
import designpattern.creation.factory.simple.OperationMul;
5+
6+
public class MulFactory implements IFactory {
7+
8+
@Override
9+
public Operation createOperation() {
10+
return new OperationMul();
11+
}
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package designpattern.creation.factory.method;
2+
3+
import designpattern.creation.factory.simple.Operation;
4+
import designpattern.creation.factory.simple.OperationSub;
5+
6+
public class SubFactory implements IFactory {
7+
8+
@Override
9+
public Operation createOperation() {
10+
return new OperationSub();
11+
}
12+
13+
}

src/designpattern/creation/factory/simple/OperationFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88
public class OperationFactory {
99
public static Operation createOperation(char operator) {
10-
Operation operation = null;
10+
Operation operation;
1111

1212
switch (operator) {
1313
case '+':

0 commit comments

Comments
 (0)