java 工厂模式 抽象工厂模式的区别_工厂方法模式和抽象工厂模式区别究竟在哪里?...

swiminthesea 写道

Factory Method:

Define an interface for create an object,but let subclass decide which class to instantiate.Factory Method lets a class defer instantiation to the subclasses.

Abstract Factory:

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

我的疑问是:

1

工厂方法模式能不能看成是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的一种推广?

因为根据定义,工厂方法模式是用来创建一个产品的等级结构的,而抽象工厂模式是用来创建多个产品的等级结构的。

那么假如目前使用工厂方法模式创建不同类型的苹果,示例代码如下:

public interface Factory

{

Apple createApple();

}

public class ConcreteFactory1 implements Factory

{

public Apple createApple()

{

return new RedApple();

}

}

public class ConcreteFactory2 implements Factory

{

public Apple createApple()

{

return new GreenApple();

}

}

上面的代码是使用工厂方法模式。那么现在假如现在我需要创建葡萄,因此需要增加创建葡萄的方法。代码如下:

public interface Factory

{

Apple createApple();

Grape createGrape();

}

public class ConcreteFactory1 implements Factory

{

public Apple createApple()

{

return new RedApple();

}

public Grape createGrape()

{

return new RedGrape();

}

}

public class ConcreteFactory2 implements Factory

{

public Apple createApple()

{

return new GreenApple();

}

public Grape createGrape()

{

return new GreenGrape();

}

}

增加创建葡萄的方法以后,就把一个工厂方法模式变成了一个抽象工厂模式,同样的道理,假如我现在去掉创建葡萄的方法以后,我就把一个抽象工厂模式变成了工厂方法模式。因此可不可以认为这两者之间在不同情况下可以相互转换?

2

“工厂方法模式是采用inheritence,而抽象工厂模式是采用composition。”但是我看不出这就是它们的区别。我同样可以把工厂方法模式中的工厂交给客户端,从而为客户端产生一个产品的不同类型。这样客户端直接依赖于一个工厂,难道这里不也是composition?

3

“工厂方法模式通常和模板方法模式一起结合使用。”但是我仍然看不出来这也是它们的区别。我同样可以把一个抽象工厂模式结合模板方法模式使用。

期待达人解惑!

工厂方法创建一般只有一个方法,创建一种产品。

抽象工厂一般有多个方法,创建一系列产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值