先上图
如上图可知简单工厂模式里的工厂类里要有接口类或父类。即会涉及到所有想实例化的类和基类(接口))。
在看这句话的理解:
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
-----------------------
设计代码大体如下:
1:设计一个基类或接口
该基类或接口中包含一些共同的属性和方法
2:设计子类继承基类
在子类中要设计自己的具体的方法
3:工厂类中要有一个方法用来进行初始化哪个子类一般有一个参数来进行传递
------------------------------------------------------------------------------
1 /// <summary>
2 /// 抽象产品类:上衣
3 /// </summary>
4 public interface ICoat
5 {
6 void GetYourCoat();
7 }
--------------------------------------------------------------
具体产品类代码
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
24
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
26
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
27
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
-----------------------------------
简单工厂模式中最核心的部分:工厂类
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
---------------------------
再看一下客户在调用的时候的代码
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
---------------------
在客户端的代码中有我们就可以根据具体的参数,返回我们希望返回的对象,将"new"操作推迟到工厂类中实现。
这里,参数我直接写上了,我们其实可以将这个参数写到一个xml文件中,如app.config文件中,动态的读出来,需要穿另外一种衣服了,只需要打开app.config文件,修改里面的值就行了,不需要项目重新编译。这样这个小程序就能够适应一定的变化了(在上传上去的代码中我会修改一下)。其实它也是设计模式正要解决的问题,在不修改代码的情况下,使项目能够适应一定的客户需求变化。注意,是一定的,并非全部。