zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Javascript高级程序设计笔记(很重要尤其是对象的设计模式与继承)
    javascript面向对象技术基础总结
    cURL范例(包括错误输出和详情输出)
    javascript知识点总结
    php memcache知识点总结
    php mcrypt加密实例
    spl处理文件(文件详细信息、文件遍历、查询指定行、写入CSV文件)
    table-layout 属性
    backface-visibility 属性 :隐藏被旋转的 div 元素的背面
    HTML 5 全局 contenteditable 属性
  • 原文地址:https://www.cnblogs.com/muzijun/p/5749743.html
Copyright © 2011-2022 走看看