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
  • 相关阅读:
    在ThinkPHP中生成中文验证码
    Touch event in certain color rect
    安装GD后不支持PNG或JPG的修复办法
    iPhone开发:proximityMonitoring邻近检测
    开放CSDN博客-欢迎到访-另附声明
    (实例篇)LNMP 1.4一键安装包,安装教程
    流量相关说明
    一个空间主机安装多个网站的方法
    怎么使用linux命令重启服务器
    CentOS、Ubuntu、Debian三个linux比较异同
  • 原文地址:https://www.cnblogs.com/muzijun/p/5749743.html
Copyright © 2011-2022 走看看