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);}];

转载于:https://www.cnblogs.com/R0SS/p/5466002.html

生成器模式 - 让配置代码更优雅相关推荐

  1. 3 个可以使你的 Python 代码更优雅、可读、直观和易于维护的工具

    Python 提供了一组独特的工具和语言特性来使你的代码更加优雅.可读和直观. 为正确的问题选择合适的工具,你的代码将更易于维护. 粉丝福利!私信回复[01]有基础教程一套 魔术方法 让我们创建一个 ...

  2. Java 效率编码 必备插件 Lombok 让代码更优雅

    1 本文涵盖注解 val var @NonNull @Cleanup @Getter / @Setter @ToString @EqualsAndHashCode @NoArgsConstructor ...

  3. 3 个简单的技巧让你的 vue.js 代码更优雅!

    关注 逆锋起笔,回复"加群" 加入我们一起学习,天天进步 作者:红尘炼心 https://juejin.cn/post/7005751368937897991 前言 近来入坑了一个 ...

  4. 通过facade(尤其是realtime facade)来使代码更优雅

    本文来自pilishen.com----原文链接; 欢迎作客我们的php&Laravel学习群:109256050 该篇翻译整理自laravel创始人Taylor的文章:Expressive ...

  5. 10个实用技巧让你的 Vue 代码更优雅

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 作者:johnYu https://juejin.im/post/6854573215969181703 前言 作为深度代码洁癖,我们都希 ...

  6. js倒计时代码最简单的_10个简单的技巧让你的 vue.js 代码更优雅

    作为深度代码洁癖,我们都希望能写出简单高效的代码,让我们的代码看起来更加优雅,让我们抛弃繁杂的代码,一起开启简单的旅程~~ slots 新语法向 3.0 看齐 ❝使用带有"#"的新 ...

  7. desc 枚举类型id_想让代码更优雅?Mybatis类型处理器了解一下!

    明确需求 在设计之初,sys_role表的enabled字段有2个可选值,其中0 代表禁用,1代表启用,而且实体类中我们使用的是Interger类型: 源码展示 /** * 有效标志 */ priva ...

  8. 如何让word中代码更优雅美观【图解】【可微调】

    方法综述 近期也搜了网上各种解决方法.大致有几种: 利用notepad++来实现 (操作路径有点长,比较麻烦) 自己在word做模版 (这个模版折腾下来倒是可以一劳永逸,但是不支持不同语言的高亮) 国 ...

  9. Jdk1.8新特性————stream流操作,让代码更优雅

    首先附上官方文档https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html#NonInterfere ...

最新文章

  1. GPT-2的大规模部署:AI Dungeon 2 如何支撑百万级用户
  2. Altium Designer09解决局域网冲突问题
  3. python3猜数字小游戏代码示例
  4. mobsdk线上崩溃事故报告_重大事故!IO问题引发线上20台机器同时崩溃
  5. sklearn综合示例9:分类问题的onehot与预测阈值调整
  6. 臭名昭著的sun.misc.Unsafe解释
  7. 中职生计算机专业600分,来了!超全盘点高职分类中500-600分及以上的高中生能报的专业和院校名单!...
  8. win7旗舰版系统关闭自动更新功能教程
  9. 漫步线性代数十三——线性变换
  10. yaourt下载安装dropbox提示curl ssl证书错误
  11. linux内核中断向量表,Linux内核中断之中断向量表IDT的初始化
  12. Struts2整合Spring方法及原理
  13. 决策树留一法python代码_西瓜书 第4章 决策树 读书笔记
  14. 【愚公系列】2022年02月 微信小程序-场景值
  15. 崩坏3区号+86_86,中国大陆国际区号是“ +86”,还是“ +086”、“ +0086”
  16. 小爱同学app安卓版_小爱同学APK提取版-小爱同学APP最新版下载5.15.10安卓版-玩友游戏网...
  17. 网络会议openmeetings下的openmeetings-util文件分析7
  18. ffmpeg合并多mp4视频
  19. 计算机基础知识教程excel试题,计算机基础知识试题
  20. 江苏赛区|2021年数学建模国赛江苏赛区获奖名单

热门文章

  1. 使用transform和transition制作CSS3动画
  2. jQuery的ajax()、post()方法提交数组,参数[] 问题
  3. Tomcat 7.0 servlet @WebServlet
  4. [C++] 用Xcode来写C++程序[6] Name visibility
  5. Java IO流操作规律
  6. solaris 10 安装Apache Mysql PHP
  7. 理解Linux系统的日志
  8. 四大组建进程间通信--基础
  9. Android 解决: Failed to resolve: com.android.support:appcompat-v7:28.+ 错误
  10. 平滑动画 每秒60帧 -- 16ms内绘完一帧