trufun 9:39:47
大家好,UML网上课堂开课啦
A()  9:41:34
哪里
阿门()  9:42:28
今天主题是什么?
trufun 9:44:00
根据上几次临时课的测试,我们感觉希望学习设计模式的人多于想学UML,这可能是由于去年讲过UML,所以我们改为讲设计模式
A()  9:44:47
继续
阿门()  9:45:12
没错
A()  9:45:58
设计模式很有意思
trufun 9:46:40
今天接着上两堂课内容继续讲,今天先讲第一个模式:抽象工厂
我已被盗(759056164)  9:47:28
这个好
阿门()  9:47:39
Thxs
A()  9:50:06
怎么不继续了
trufun 9:51:10
首先让我们回顾一下上堂课的内容:在设计模式中有两种类,一个是实体类,另一个是辅助类,实体类从需求中来,而辅助类是根据需要添加的,不同模式有不同的添加
品味从容()  9:53:01
实体类则为抽象基类?
trufun 9:53:21
不对
trufun 9:53:59
请看上堂记录
A()  9:54:25
都没有看到上堂
trufun 9:56:15
首先我们讨论抽象工厂这种模式想达到的目的,这是我们应用设计首先要考虑的问题:意图
A()  9:56:39

trufun 9:58:38
在面向对象编程中,对于类,我们首先要实例化,这样才能使用它的属性和方法
品味从容()  9:59:18
这没错
trufun 10:01:02
如果类之间没有关系(关联等);先实例化那个类,后实例化那个类没有关系
trufun 10:04:24
但是,类之间往往存在着复杂的依赖关系,要实例一个类,首先要实例化它内部依赖的其他类
A()  10:04:41
你说的是子类
A()  10:05:21
哦,不对,我理解了,是类中引用其他类
trufun 10:05:33
子类只是一种
A()  10:05:54

乐百氏(14048124)  10:07:57
包括聚合、组合、关联引用吧
trufun 10:09:54
比如手电类要实例化,必须依赖于电池类先实例化,否则,手电类的发光方法(依赖电池类)就无法实现
webmaster()  10:10:55

=========大家可向企业推荐trufun的内训课程,可获赠苹果ipad或者iPhone 4S产品!========

trufun 10:15:37
在软件开发中存在着大量的这样的关系,这种实例化的需求并不是固定的,是随着客户端的操作在随时变化
trufun 10:18:18
为了解决这个问题,人们总结出一种设计模式,叫抽象工厂,用它来解决复杂系统类的实例化问题
trufun 10:21:50
总结:1.类之间有关系,所以实例化有顺序,2.编程并不是先把所有类都实例化好以后才使用,而是根据客户端得操作动态实例化
webmaster()  10:23:57
老师同时兼顾好几个群的课程,所以会慢一点
trufun 10:23:58
设计模式意图:提供一个创建一系列相关或依赖对象的接口,而无需知道内部的实现类。即客户端只和抽象类定义的接口交互,而不和具体类定义的接口交互
webmaster()  10:24:11
不过大家刚好可以多参与讨论
webmaster()  10:24:39
另外也可以多了解trufun针对企业推广的一些列UML相关课程,
webmaster()  10:25:03
包含需求、分析设计、架构、测试、设计模式、复用等高端课程
webmaster()  10:25:34
可以快速解决企业问题,大家可以向企业推荐选择以上课程
trufun 10:28:46
为了解决实例化的问题,我们必须加入辅助类,这个辅助类就是我们上堂课介绍的接口和抽象类
乐百氏(14048124)  10:30:25
辅助类的添加,就按设计模式的标准来配置就行了吧?
webmaster()  10:30:32
推荐3天的企业内训,就可获赠trufun送出的苹果iPad一台!
trufun 10:31:01
请大家到下列地址去看模型图: http://blog.sina.com.cn/s/blog_a1c79d4801014gdu.html
webmaster()  10:31:11
推荐5天的企业内训,可获赠苹果iPhone 4S一部
trufun 10:31:32

trufun 10:34:02
大家从模型图中找出实体类和辅助类
trufun 10:36:51
实体类只有产品A1,A2,B1,B2,并且B1,B2依赖于A1,A2
trufun 10:40:54
另外一个实体类是客户端类,它动态实例化有关,其余都是辅助类
trufun 10:46:05
这些辅助类的作用实质上是创建责任的分配,就是由哪个类创建那个类
trufun 10:49:09
说的再白一点,客户端动态操作变化,这个变化传递给辅助类,又它决定先实例化那个类,后实例化那个类
trufun 10:52:19
这些类有的资料叫做产品族,或者层次结构产品
trufun 10:54:47
有两个抽象产品类就是产品族的概念
trufun 10:58:10
上堂课我们讲过,我们的设计模式的课侧重于模型,从第三要素,角色职责讨论设计模式
trufun 11:03:05
那么,在抽象工厂中有哪些角色呢,我们先从实体类看起,就是A类产品和B类产品角色,B类依赖于A类,另一个是客户端角色
trufun 11:08:18
在辅助类中,分为产品和工厂两部分,产品类主要是A,B两类产品的接口,实现对实例化的封装
trufun 11:15:29
另一个角色抽象工厂,它封装了要实例化那一个系列的产品,以满足客户端调用的要求
trufun 11:16:31
还有两个辅助类是抽象工厂的实现类,它动态决定具体实例化那个系列产品
trufun 11:20:26
电池和手电就象我们刚才例子中A,B产品,产品系列就象普通手电和高档手电这样的产品系列
A()  11:22:33
形象
trufun 11:22:48
谢谢
trufun 11:24:18
所以左上角的抽象工厂三个类,就是解决产品系列的问题,并满足客户端的调用
trufun 11:27:31
右下角的辅助类,主要解决产品族的问题,并满足产品系列实现的调用
trufun 11:29:47
前面我们讨论的是抽象工厂的角色和职责,是设计模式第三要素
trufun 11:32:51
有了角色和职责这些静态内容,你可能要问这几个类是这样配合来满足客户端得变化呢?
trufun 11:35:38
我们用通讯图反映这个动态过程:地址: http://blog.sina.com.cn/s/blog_a1c79d4801014gdw.html
trufun 11:39:52
今天的课就到这里,下堂讲工厂方法