参考链接:http://blog.youkuaiyun.com/wyxhd2008/article/details/5597975
分析
抽象工厂模式同工厂模式类似,工厂模式的每一个工厂产生一个具体的产品。而抽象工厂的每一个工厂产生的是一个产品族,每一个族可能有很多小的产品产品组成,类似于一个完整的产品有许多小零件组成。也就是其他文章可能常说的抽象工厂模式中,一个工厂可以产生多个产品,这个是与工厂模式的区别。
例如:一把枪由枪身和弹夹组成,不管哪个工厂生产,必定需要生产枪身和弹夹。这样我们可以抽象出来两个产品。抽象枪身A,抽象弹夹B,可以抽象出来一个工厂AbstractFactory, 他包含两个抽象方法CreateA和CreateB,来生产枪身和弹夹。不同的枪,枪身和弹夹是不同,这样可以有多个具体的枪身类继承于抽象枪身A,多个具体的弹夹类继承抽象弹夹B。这样我们也就需要多个不同的工厂继承与抽象工厂AbstractFactory来生产枪身和弹夹,从而来组装成一把完成的枪。
(文字比较多,有时间我补一个流程图)
在我看来工厂模式和抽象工厂的模式是适用于不同的情形,没有优劣之分。两个模式对比如下:
逻辑结构
abstract class ProductA
{
public void Method()
{
//公共方法
}
public abstract void MehodDiff();
}
abstract class ProductB
{
public void Method()
{
//公共方法
}
public abstract void MehodDiff();
}
class ConcreteProductA1 : ProductA
{
public override void MehodDiff()
{
//自己的方法
}
}
class ConcreteProductA2 : ProductA
{
public override void MehodDiff()
{
//自己的方法
}
}
class ConcreteProductB1 : ProductB
{
public override void MehodDiff()
{
//自己的方法
}
}
class ConcreteProductB2 : ProductB
{
public override void MehodDiff()
{
//自己的方法
}
}
//抽象工厂
abstract class AbstarctFactory
{
public abstract ProductA CreateProductA();
public abstract ProductB CreateProductB();
}
//具体工厂1(AB构成一个产品族)
class ConcreteFactory1 : AbstarctFactory
{
public override ProductA CreateProductA()
{
return new ConcreteProductA1();
}
public abstract ProductB CreateProductB()
{
return new ConcreteProductB1();
}
}
//具体工厂2(AB构成一个产品族)
class ConcreteFactory2 : AbstarctFactory
{
public override ProductA CreateProductA()
{
return new ConcreteProductA2();
}
public abstract ProductB CreateProductB()
{
return new ConcreteProductB2();
}
}
2178

被折叠的 条评论
为什么被折叠?



