定义:工厂方法也称虚构器,它适用于这种情况,一个类无法预期需要生成哪个类的对象,想人子类来指定所生成的对象。
类型:对象创建
注:
------------------------------------------
抽象工厂 工厂方法
------------------------------------------
通过对象组合创建抽象产品 通过类继承创建抽象产品
创建多系列产品 创建一种产品
必须修改父类的接口才能支持新的产品 子类化创建者并重载工厂方法以创建新产品
------------------------------------------
类图:
应用示例
#import <UIKit/UIKit.h>
@interface CanvasView : UIView
@end
#import "CanvasView.h" @implementation CanvasView @end
#import <Foundation/Foundation.h> #import "CanvasView.h" @interface CanvasViewGenerator : NSObject - (CanvasView *)canvasViewWithFrame:(CGRect)aframe; @end
#import "CanvasViewGenerator.h" @implementation CanvasViewGenerator - (CanvasView *)canvasViewWithFrame:(CGRect)aframe{ return [[CanvasView alloc]initWithFrame:aframe]; } @end
#import "CanvasView.h" @interface ClothCanvasView : CanvasView @end
#import "ClothCanvasView.h" @implementation ClothCanvasView - (instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor redColor]; } return self; } @end
#import "CanvasViewGenerator.h" @interface ClothCanvasViewGenerator : CanvasViewGenerator @end
#import "ClothCanvasViewGenerator.h" #import "ClothCanvasView.h" @implementation ClothCanvasViewGenerator - (CanvasView *)canvasViewWithFrame:(CGRect)aframe{ return [[ClothCanvasView alloc]initWithFrame:aframe]; } @end
//示例
#import <UIKit/UIKit.h> @interface DemoViewController : UIViewController @end
#import "DemoViewController.h" #import "CanvasViewGenerator.h" #import "CanvasView.h" @implementation DemoViewController - (void)viewDidLoad{ [super viewDidLoad]; CanvasViewGenerator *defualtGenerator = [[CanvasViewGenerator alloc]init]; [self loadCanvasViewWithGenerator:defualtGenerator]; } - (void)loadCanvasViewWithGenerator:(CanvasViewGenerator *)generator{ CGRect frame = CGRectMake(0, 0, 100, 100); CanvasView *canvasView = [generator canvasViewWithFrame:frame]; [self.view addSubview:canvasView]; } @end