您的位置:首页 > 其它

设计模式之——抽象工厂讨论内容

2012-04-10 14:30 267 查看
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

今天的课就到这里,下堂讲工厂方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: