由浅入深学“工厂模式”

由浅入深学“工厂模式”

ID:40312813

大小:400.50 KB

页数:15页

时间:2019-07-30

由浅入深学“工厂模式”_第1页
由浅入深学“工厂模式”_第2页
由浅入深学“工厂模式”_第3页
由浅入深学“工厂模式”_第4页
由浅入深学“工厂模式”_第5页
资源描述:

《由浅入深学“工厂模式”》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、由浅入深学“工厂模式”(1)2007-03-2517:131、  传授设计模式中存在的问题  我个人最近对设计模式中的工厂模式进行了比较深入的学习,通过学习感悟出,现在很多设计模式传道者,在讲述设计模式的过程中存在一些问题,使得设计模式变得很难理解。设计模式本身很抽象,但是这些传道者在讲述的过程中,将一个抽象的东西讲的更抽象,从而使我们望而却步。有些人在讲述的时候,没有考虑读者的注意力。比如我在看《C#设计模式》的时候,在讲述抽象工厂模式的时候,直接就进入了一个示例,而且这个例子比较复杂,涉及了比较多的概念、术语,而且还有算法要处理

2、。但是这些和要讲述的核心内容无关,我想要看懂他的示例就要将这个东西都搞懂,就分散了我的注意力。我个人总结,学习设计模式的方法是,首先找到一个突破口,比如可以先学习构造型模式中简单的模式,将它理解、熟练应用。通过对一、两个模式有一个深入的认识之后,再学习其它比较复杂一点的模式就容易多了,这是一种迭代的思想在学习中的应用。另外学习任何一种设计模式的过程应该是具体-抽象-再具体这个的一个过程。这句话的意思是首先通过一个比较具体一点的例子来帮助理解设计模式,在理解之后将你的理解扩展到解决这一类问题,上升到一定的理论高度。然后就是再到具体,也

3、就是应用设计模式,应用理论解决自己遇到的实际问题。2、学习工厂模式的预备知识:  首先声明这些预备知识并不是工厂模式仅仅需要,因为我先讲述工厂模式,所以在学习工厂模式之前将这些问题提出。2.1Upcasting:  Upcasting中文翻译有好几个,比如向上类型转换、向上转型、上溯造型。我个人比较喜欢向上转型这个翻译,即简单又含义明确。向上转型这个概念,我在BruceEckel的Thinkinginc++、ThinkinginJava中都看到过,我不是很确定这个概念是否是他提出来的。向上转型是把一个派生类当作它的基类使用。我们将一

4、个更特殊的类型转换到一个更常规的类型,这当然是安全的。派生类是基类的一个超集。它可以包含比基类更多的方法,但它至少包含了基类的方法。向上转型给我们带来的好处就是我们可以将不同的派生通过一种统一的方式进行处理。向上转型带来的弊端就是我们向上转型的过程会丢失派生类的接口。既然有向上转型,也就有向下转型即DownCasting,我们在此不做详细讨论。下面使用一个例子来示例向上转型。publicclassBase{   publicvoidTest(){      MessageBox.Show("OK");    }}publicclas

5、sDerive:Base{}privatevoidbutton1_Click(objectsender,System.EventArgse){   Baseb=newDerive();   b.Test();}2.2多态  我不敢想象离开了多态后的设计模式是一个什么样子。什么是多态,我喜欢总结这样一句话来回答这个问题,“一个接口,多种实现”。注意这里的接口不仅仅表示Interface关键字,是广义上的接口。在C#中实现接口我们有两种途径,一种是借助继承来实现,一种是借助Interface来实现。3、工厂设计模式理论3.1概述  工厂

6、模式具体包括了简单工厂、工厂方法、抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式。但是它是理解其它的工厂模式的一个很好的基础,所以很多人在讲述设计模式的时候会提到简单工厂模式。创建型模式关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。3.2不使用任何模式  我们现在有这样的一个设计,影像家电(VideoWiring)包括了DVD、VCD。在基类VideoWir

7、ing中有PlayVideo方法,子类重载了这个方法。  我们如何来调用PlayVideo进行播放呢。我们可以看到下面的代码可以实现。  下面是调用对象的方法进行播放的代码:publicabstractclassVideoWiring{     publicabstractstringPlayVideo();}publicclassVCD:VideoWiring  {     publicoverridestringPlayVideo()     {         return"正在播放播放VCD";     }}publiccl

8、assDVD:VideoWiring  {     publicoverridestringPlayVideo()     {         return"正在播放播放DVD";     }}dvd.PlayVideo();这样的语

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。