iOS设计模式-工厂方法

定义:工厂方法也称虚构器,它适用于这种情况,一个类无法预期需要生成哪个类的对象,想人子类来指定所生成的对象。

类型:对象创建

注:            

------------------------------------------

                   抽象工厂                                         工厂方法

------------------------------------------

通过对象组合创建抽象产品                        通过类继承创建抽象产品

创建多系列产品                                      创建一种产品

必须修改父类的接口才能支持新的产品         子类化创建者并重载工厂方法以创建新产品

------------------------------------------

类图:

应用示例

#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
原文地址:https://www.cnblogs.com/muzijun/p/5749743.html