一:概念
抽象工厂是工厂方法模式的升级版本,他用来创建一组相互依赖的对象。
二: 应用说明
正如DEMO abstractFactoryMode Group 中所说。
也就是说当每个抽象产品都有多于一个的具体子类的时候(apple有型号northApple和SouthApple两种。 而bannana 也有两种),工厂角色怎么知道实例化哪一个子类呢?这时候我使用了抽象工厂模式。 抽象的工厂 对应于 有多个具体子类的 抽象产品。这也是 抽象工厂 和 普通工厂方法模式的区别。
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
三:
抽象产品 Fruit - > 抽象产品 apple / banana -> northapple southapple northbanana southBanana
相比
抽象产品 BZ -> 具体产品 BZ550 BZ520 系列。 二者的产品线区别就能看出抽象工厂和普通工厂的区别了。
下面来介绍抽象工厂 。 抽象类这里我们使用一个 协议Protocol 来实现。 在Java 中可以使用 @interface 来实现
#import
@protocolFruit
/**
采集 水果
*/
- (void)get;
@end
然后是 抽象产品 Apple
#import
#import"Fruit.h"
@interfaceApple :NSObject
- (void)get;
@end
还有抽象的产品类 banana
#import
#import"Fruit.h"// 水果协议
@interfaceBanana :NSObject
- (void)get;
@end
具体产品类 我就不列举了。
抽象工厂: 在java 中我们可以使用 @interface 来代替 就是一个接口。
#import
@protocolFruit;
@protocolFruitFactory
- (id)getApple;
- (id)getBanana;
@end
具体工厂类:
#import
#import"FruitFactory.h"
@interfaceNorthFactory :NSObject
@end
@implementationNorthFactory
- (id)getApple
{
NorthApple*northApple = [[NorthApplealloc]init];
returnnorthApple;
}
- (id)getBanana
{
NorthBanana*northBanana = [[NorthBananaalloc]init];
returnnorthBanana;
}
@end
客户端调用代码:
NorthFactory*northFactory = [[NorthFactory alloc]init];
id northApple = [northFactory getApple];
[northApple get];
id northBanana = [northFactorygetBanana];
[northBanana get];
SouthFactory*southFactory = [[SouthFactory alloc]init];
id southApple = [southFactory getApple];
[southApple get];
id southBanana = [southFactory getBanana];
[southBanana get];
通过这些就可以看出二者的区别。
网友评论