在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
工厂是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。 这里的话,工厂1就只能生产产品型号1,工厂2就只能生产产品型号2,下面用实际代码实现来描述一般工厂模式: 这里声明一个交通工具产品,它包含了Car和Plane两种型号的交通工具,这两种工具都有一个相同的动作就是run。
1 @interface Vehicle : NSObject{ 2 } 3 - (void)run; 4 @end 5 6 @implementation Vehicle 7 - (void)run{ 8 } 9 @end 10 11 12 @interface Car : Vehicle{ 13 } 14 - (void)run; 15 @end 16 17 @implementation Car 18 - (void)run{ 19 NSLog(@"汽车在公路上跑"); 20 } 21 @end 22 23 24 @interface Plane : Vehicle{ 25 } 26 - (void)run; 27 @end 28 29 @implementation Plane 30 - (void)run{ 31 NSLog(@"飞机在天上飞"); 32 } 33 @end 上面我们定义了交通工具里面的两种产品,下面我们将定义生产这些交通工具的工厂: @interface VehicleFactory : NSObject{ } - (Vehicle *)createVehicle; @end @implementation VehicleFactory - (Vehicle *)createVehicle{ } @end @interface CarFactory : VehicleFactory{ } - (Vehicle *)createVehicle; @end @implementation CarFactory - (Vehicle *)createVehicle{ return [[[Car alloc] init] autorelease]; } @end@interface PlaneFactory : VehicleFactory{ } - (Vehicle *)createVehicle; @end @implementation PlaneFactory - (Vehicle *)createVehicle{ return [[[Plane alloc] init] autorelease]; } @end 现在我们具体使用: 1 @interface UseVehicle : NSObject{ 2 } 3 - (void)useVehicle; 4 @end 5 6 @implementation UseFactory 7 - (void)useVehicle{ 8 VehicleFactory *factory = [[CarFactory alloc] init]; 9 Vehicle *vehicle = [factory createVhicle]; 10 [vehicle run]; 11 //这里是创建了一辆汽车,如果要换成飞机,只需在实例化工厂的时候用PlaneFactory就可以。 12 } 13 @end 下面就给出抽象工厂的图,具体实例就不再代码描述,大致意思如下: 1 - (id)someMethod:(SomeObject *)blah 2 { 3 @throw [NSException exceptionWithName:NSInternalInconsistencyException 4 reason:[NSString stringWithFormat:@"You must override %@ in a subclass", 5 NSStringFromSelector(_cmd)] 6 userInfo:nil]; 7 } 1 - (id)init 2 { 3 if ([self class] == [FastEnumerable class]) { 4 @throw [NSException exceptionWithName:NSInternalInconsistencyException 5 reason:@"Error, attempting to instantiate AbstractClass directly." userInfo:nil]; 6 } 7 8 self = [super init]; 9 if (self) { 10 // Initialization code here. 11 } 12 13 return self; 14 } |
请发表评论