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
  • 相关阅读:
    序列化与反序列化
    SQL Server 中常见的十张系统表
    DataGridView的18中用法
    文件操作
    数据库的学习
    GUI图形图像编程主要技术的学习梳理
    软件研发过程中常用图形总结
    windows10 升级1803后,远程错误提示“出现身份验证错误,要求的函数不受支持 CredSSP 加密 Oracle修正”的解决办法
    SQLServer中按照任意分钟(5分钟、10分钟)分组统计数据
    支付宝APP支付,提示代码 ALIN10070
  • 原文地址:https://www.cnblogs.com/muzijun/p/5749743.html
Copyright © 2011-2022 走看看