[图解]分析模式-04-通讯录2

1
00:00:01,090 --> 00:00:06,010
首先我们来看通讯录的一个实例

2
00:00:07,140 --> 00:00:09,570
上过之前的分析设计高阶

3
00:00:09,580 --> 00:00:11,080
或者说以前叫

4
00:00:11,090 --> 00:00:12,760
领域驱动设计的课程的同学

5
00:00:12,770 --> 00:00:16,330
可能幻灯片看到过

6
00:00:18,910 --> 00:00:21,780
我们也是在这个基础上进一步深化的

7
00:00:23,780 --> 00:00:26,330
这个图我就直接拿来借用了

8
00:00:27,440 --> 00:00:29,670
因为这是虚构的

9
00:00:30,350 --> 00:00:32,550
你要再虚构这么一个人

10
00:00:32,960 --> 00:00:35,620
要替换要什么还挺麻烦的

11
00:00:35,870 --> 00:00:39,340
还是拿邓超越邓总来说事了

12
00:00:41,840 --> 00:00:45,290
邓总有这么一些联系方式

13
00:00:45,820 --> 00:00:47,810
当然他还有一些其他的

14
00:00:49,150 --> 00:00:50,720
是非联系方式的

15
00:00:51,620 --> 00:00:52,890
职务什么我们先不管了

16
00:00:52,980 --> 00:00:58,260
我们先看通讯录这部分,直接搬运过来

17
00:00:58,670 --> 00:00:59,860
这肯定是不好的了

18
00:01:01,120 --> 00:01:04,380
这样列过来,倒是直截了当

19
00:01:04,390 --> 00:01:09,680
而且迎合文盲的水平了

20
00:01:09,690 --> 00:01:12,450
但是这个结构是不好的

21
00:01:12,460 --> 00:01:15,880
因为他违反第一范式

22
00:01:16,860 --> 00:01:19,520
同样的一个内容

23
00:01:19,530 --> 00:01:21,150
你搞了多个属性

24
00:01:22,840 --> 00:01:24,480
而且你这123,4怎么办

25
00:01:24,730 --> 00:01:25,680
还有更多怎么办

26
00:01:26,830 --> 00:01:28,180
这个结构显然是不好扩张的

27
00:01:28,730 --> 00:01:33,130
它把数据的变化

28
00:01:33,140 --> 00:01:36,550
就直接体现在了结构的变化上面

29
00:01:37,890 --> 00:01:39,290
我有多个电话,就变成

30
00:01:39,300 --> 00:01:42,580
我有多个电话的字段了,那不行

31
00:01:46,470 --> 00:01:50,470
所以首先要把它分离出去

32
00:01:51,460 --> 00:01:52,700
多个分离出来

33
00:01:53,600 --> 00:01:55,790
电话号码,手机号码

34
00:01:55,800 --> 00:01:57,690
电子邮件,这样来

35
00:01:58,190 --> 00:01:59,340
这个也是可以的

36
00:02:00,850 --> 00:02:04,490
如果说没有太复杂的要求,这样也行

37
00:02:04,500 --> 00:02:05,730
把多个的分离出去

38
00:02:05,740 --> 00:02:09,230
一个的放里面,或者你就放里面

39
00:02:09,240 --> 00:02:10,750
然后标多个就行了

40
00:02:11,210 --> 00:02:14,120
在电话后面加一个*

41
00:02:14,480 --> 00:02:17,430
表示这是多个,也行

42
00:02:17,560 --> 00:02:18,750
不用搞这个出来

43
00:02:23,430 --> 00:02:26,930
但是又有一个问题,就是说

44
00:02:26,940 --> 00:02:30,870
联系手段的废弃

45
00:02:31,260 --> 00:02:33,500
和新兴的添加

46
00:02:33,510 --> 00:02:34,780
出来新的类型的问题

47
00:02:35,030 --> 00:02:36,780
比如说,以前的传真号、MSN

48
00:02:37,220 --> 00:02:40,810
还有传呼机BP机

49
00:02:40,820 --> 00:02:42,050
现在都没有了

50
00:02:43,980 --> 00:02:46,640
当时如果说我们做了一个模型

51
00:02:46,950 --> 00:02:49,210
上面有MSN、有BP机

52
00:02:49,220 --> 00:02:50,330
有传真号

53
00:02:52,240 --> 00:02:53,720
但是没有微信微博

54
00:02:55,500 --> 00:02:58,360
这个结构本身就失效了

55
00:03:00,690 --> 00:03:02,000
如果说不想失效

56
00:03:02,210 --> 00:03:03,410
有的就会拿

57
00:03:03,420 --> 00:03:05,890
比如说,传真意思就是微信的意思

58
00:03:06,490 --> 00:03:09,520
把不用的拿出来用

59
00:03:09,530 --> 00:03:11,230
MSN就是微博的意思

60
00:03:13,510 --> 00:03:15,580
这显然也是不好的

61
00:03:16,900 --> 00:03:18,440
所以这个里面

62
00:03:18,450 --> 00:03:20,740
我们就不能把一些

63
00:03:21,520 --> 00:03:24,810
容易变化的内容

64
00:03:24,820 --> 00:03:28,380
可以直接就硬性的来建模了

65
00:03:29,580 --> 00:03:33,670
必须建模一些比较常驻的

66
00:03:33,680 --> 00:03:38,710
就是说,现在有,以后也有的,这样一些概念

67
00:03:39,950 --> 00:03:42,460
像MSN现在就没有了

68
00:03:42,870 --> 00:03:44,970
20年前有

69
00:03:45,100 --> 00:03:46,250
现在没有了

70
00:03:46,760 --> 00:03:47,620
微信现在有

71
00:03:47,630 --> 00:03:50,210
但是20年前就没有

72
00:03:50,220 --> 00:03:52,440
10年之后有没有就不知道了

73
00:03:56,110 --> 00:04:00,620
所以,哪些概念是我们过去有

74
00:04:00,630 --> 00:04:02,370
现在有、以后也有的

75
00:04:03,870 --> 00:04:04,950
比如说,联系方式

76
00:04:06,950 --> 00:04:09,190
这个是过去有

77
00:04:09,200 --> 00:04:10,510
现在有以后也有的

78
00:04:11,270 --> 00:04:13,120
我们必须要把我们的模型

79
00:04:14,300 --> 00:04:16,100
建立在这样的概念上面

80
00:04:17,050 --> 00:04:21,300
不能直接MSN、传真这样

81
00:04:23,910 --> 00:04:26,990
或者说,我们至少要在这个层次上来操作

82
00:04:28,510 --> 00:04:29,790
来编写我们的程序

83
00:04:31,880 --> 00:04:35,820
下面的这些我们可以把它变成子类

84
00:04:36,090 --> 00:04:38,340
就可以通过泛化来隔离变化

85
00:04:38,740 --> 00:04:43,740
但是我们用来做计算的时候

86
00:04:47,960 --> 00:04:49,070
我们只到这一层

87
00:04:49,460 --> 00:04:52,240
下面这个我们不能直接去使用它的

88
00:04:53,050 --> 00:04:54,040
只能到这一层

89
00:04:56,730 --> 00:04:58,280
通过泛化来隔离变化

90
00:05:01,120 --> 00:05:03,960
显然我们讲到类建模的时候

91
00:05:04,540 --> 00:05:05,530
包括我们前面讲

92
00:05:07,050 --> 00:05:08,810
分析设计高阶的时候也说了

93
00:05:10,380 --> 00:05:12,200
这个幻灯片大家都见过了

94
00:05:13,730 --> 00:05:18,570
就是说,如果能用关联解决的,关联优先

95
00:05:19,310 --> 00:05:23,040
也就是说,我们一个关系

96
00:05:24,210 --> 00:05:29,860
我们可能可以用泛化方式来解决

97
00:05:31,160 --> 00:05:34,500
人分为男人女人两个子集

98
00:05:37,510 --> 00:05:40,310
那就是子类、超类的泛化关系

99
00:05:41,740 --> 00:05:44,980
但是我们也可以说人有性别

100
00:05:46,590 --> 00:05:48,960
我们把男人女人这些

101
00:05:49,970 --> 00:05:52,000
可以看作性别的一个实例

102
00:05:52,010 --> 00:05:56,430
人有性别,这样就完了

103
00:05:58,770 --> 00:06:02,120
然后本来我们是说这上面计税

104
00:06:02,680 --> 00:06:03,630
下面计税

105
00:06:03,640 --> 00:06:08,610
然后各自实现自己的计税的计算方式

106
00:06:08,620 --> 00:06:09,090


107
00:06:10,180 --> 00:06:12,770
如果说这里面还能提炼出来的话

108
00:06:13,440 --> 00:06:15,120
它们的区别就在于一个税率

109
00:06:16,420 --> 00:06:20,080
那么我们就用上面这个

110
00:06:21,160 --> 00:06:23,190
税费=收入*性别.税率,就可以了

111
00:06:24,100 --> 00:06:25,100
不需要下面这个

112
00:06:25,110 --> 00:06:28,640
但如果说更复杂了

113
00:06:29,740 --> 00:06:30,460
没办法了

114
00:06:31,190 --> 00:06:35,010
必须通过行为的差别来解决

115
00:06:36,500 --> 00:06:37,930
必须要引进泛化关系

116
00:06:38,610 --> 00:06:39,400
这个没有问题

117
00:06:40,640 --> 00:06:41,820
当然不引进泛化关系

118
00:06:41,830 --> 00:06:47,230
你在类里面用条件分支也可以

119
00:06:47,360 --> 00:06:50,360
这两个是互相可以替换的

120
00:06:50,530 --> 00:06:52,440
就是说,我们把泛用关系

121
00:06:52,450 --> 00:06:57,270
延迟到不得不用的地方

122
00:06:59,060 --> 00:07:00,300
这个我们前面说过了

123
00:07:02,550 --> 00:07:05,440
所以这里面我们就会说到一个

124
00:07:05,450 --> 00:07:08,830
在各种各样的模式里面

125
00:07:09,000 --> 00:07:10,430
特别是分析模式里面

126
00:07:12,580 --> 00:07:14,140
用的一个转换的方式

127
00:07:15,230 --> 00:07:18,390
把泛化转成类、类类型这样的关联

128
00:07:21,120 --> 00:07:23,630
像刚才性别就是一个类类型

129
00:07:25,860 --> 00:07:28,290
类类型这个,是我这边的称呼了

130
00:07:30,270 --> 00:07:35,040
历史上也有一些

131
00:07:35,050 --> 00:07:38,410
方法学家归纳了类似的模式

132
00:07:39,540 --> 00:07:41,230
它们的叫法各自不同

133
00:07:41,360 --> 00:07:45,620
比如说Odell叫

134
00:07:45,630 --> 00:07:46,740
power type

135
00:07:49,590 --> 00:07:55,820
强力类型

136
00:07:56,350 --> 00:08:03,350
就类型上面的类型,树,树的类别,树种

137
00:08:04,490 --> 00:08:06,200
这是1994年的了

Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值