zoukankan      html  css  js  c++  java
  • 生成器模式

    Initialization

    在这篇文章中博主开头说的这样情况非常常见并且一直困扰着我,因为像我这种靠纯代码写的人,不单单阅读代码,而且还要精简代码以至优雅,博主的思路恰恰帮助了我,所以我特地记录一下,并且日后来不断优化。

    1.使用场景###

    例如一个自定义控件,它有很多属性,如果使用这个控件,就要对他属性进行设置,常见以下两种用法:
    1.第一种方式

    TargetClass * targetClass = [[TargetClass alloc] init];
    targetClass.propertOne  = @"属性一";
    targetClass.propertTwo  = NO;
    targetClass.propertThir = 3;
    

    2.第二种方式

    TargetClass * targetClass = [[TargetClass alloc] initwithPropertyOne:@"属性一" PropertyTwo:NO PropertyThir:3];
    

    1.1分析两种方式###

    第一种方式可拓展好写,但无法办法约束,无法初始化这些属性。
    第二种方法就可以约束属性,但扩展行差。

    加入有新需求,在TargetClass控件上增加UIColor属性:
    使用第一种方式,可以直接增加UIColor属性,但是使用的工程师有可能忘记或者完全不知道新增加的是什么属性。
    使用第二种方式,就会新建了初始化类方法,但随着属性增加越来越多 ……

    博主的解决方法是通过build去检查填写的属性,之后生成对象。

    1.2Builder Pattern 的两个目的:###

    1.可拓展性高
    2.约束属性值


    2.Builder Pattern###

    demo地址

    博主在他的博客中提出了两个解决方案,个人认为第二种更加适合。通过block把目标

    3. Masonry中就是实用这样模式对view进行约束###

    #import "Masonry.h"

        [topSubview makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.mas_topLayoutGuide);
            make.centerX.equalTo(@0);
            make.width.equalTo(@20);
            make.height.equalTo(@20);
        }];
    
  • 相关阅读:
    asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像
    C#中DataTable中的Compute方法使用收集
    c#的DateTime.Now函数详解
    附加数据库失败,拒绝访问
    xml文件绑定chenckbox选择框
    Maximum Xor Secondary(单调栈好题)
    Y(类树形DP)
    Average distance(类树形DP)
    Balls and Boxes (模拟题)
    Party at Hali-Bula(树形DP+判断方案数是否唯一)
  • 原文地址:https://www.cnblogs.com/R0SS/p/5466002.html
Copyright © 2011-2022 走看看