通俗点介绍,先从工厂模式开始。工厂模式,很简单,工厂就生产东西的地方。这里当然是生产对象了。在遥远原始社会,我们需要一个对象,都是new出来的,相当与自己动手做的。
比如 要一条鱼 Fish f1=new Fish();一条鱼就来了,现在有了工厂,鱼就来的容易了,Fish f1=Factory.getFish();看鱼来的容易多了,不用去new了,问Factory要(getFish())。简单吧,相信你以前也用过,只不过不知道叫工厂模式罢了。
好了,接下来解释一下抽象工厂,顾名思义,这个工厂是抽象的,上面我们看到的Factory是一个对象(或者静态类),他是我们编写用来产生鱼的。
public static class Factory
{
public static Fish getFish()
{}
}
随便写下(有语法错误,别怪我哦),抽象工厂中,这个Factory是个抽象类,也不是具体的,Factory我们把他当作一个市场,可能是菜市场FactoryCai、花鸟市场FactoryNiao、也可能是钓鱼场FactoryDiao,反正是不确定的,现在我的需求还是一条鱼,不同的市场给出不同的鱼,按照原始社会做法,应该是
Fish f1=FactoryCai.getFish();//我要一条黄鱼
Fish f2=FactoryNiao.getFish();//我要一条金鱼(鲸鱼,买不起)
Fish f3=FactoryDiao.getFish();//我要一条我钓得起来的鱼
既然FactoryCai,FactoryNiao,FactoryDiao都是继承于Factory,那为什么不写Fish f1=Factory.getFish(x);//到底是返回什么鱼,由传入的参数x来决定,
这就是抽像工厂,简单吧,呵呵。
为什么要写成抽象工厂的模式,我想说明一下:
1.可以少改代码,我一向认为只要改了代码就需要花大量的成本(时间、金钱)进行测试...
2.能隔离要生成的具体对象,也就是松耦合。这样做的好处是,可以自由改动、增加这些具体的类(FactoryCai)。
完整代码不想写了,抽象工厂模式实在太简单了,实在有问题发我email拉。
因为上次没给代码,再次给Aragorn_Elessar 等朋友道个歉,
我这里的环境是.net 1.1 用c#描述:
问题先描述一下:
我要一条鱼,现在地方有三个可以让我选择,一、菜市场;二、花鸟市场;三、钓鱼场;
现在先定义鱼的类









然后定义抽象工厂类





具体工厂:


















还有一个得到工厂的类













我要一条鱼:
Factory oneFactory =GetFactory.setFactory("取得某个工厂的参数");//可以配置在配置文件中。
Fish fish=oneFactory .getFish();//某个工厂就已经决定某条鱼了。
如果再扩展的话,就把Fish变成抽象的,具体的有Fish1,Fish2,Fish3.
写的比较仓促,刚刚起来,按自己记忆中的写了,也没仔细想,当然仅仅是为了得到一条鱼而用模式工厂有点傻,这个例子不好,只是为了说明这么个写法,谢谢你们的批评,至于抽象工厂是专门为了解决什么而存在,我个人的意见是能解决什么问题就解决什么问题,也不局限与“两个产品更新换代绑定”,你觉得呢,欢迎再给我提点建议,:)