当前位置: 首页 > 编程日记 > 正文

iOS 设计模式浅析 1 - 策略

本篇文章主要讲三个点:

1. 什么是策略模式.

2. 策略模式的优缺点.

3. demo .

1. 策略模式

定义一系列算法, 并且将每个算法封装起来, 算法之间可以互相替换. 使用前提: 输入已知, 好比你渴了, 可以喝可乐, 可以喝牛奶, 也可以喝水.

在我们项目中比较常见的使用情况:

1. 切换主题, 要展示图片, 只是展示的图片不同而已.

2. 更换显示状态, 总用淘宝的人知道, 展示界面可以是一排一个 cell, 也可以是一排两个 cell.

放一张图简单明了:


2. 策略模式的优缺点

优点: 逻辑清晰, 代码维护性强

缺点: 代码量会增大一些, 应用场景局限

3. demo

策略最重要的一点是策略类, 它是一个抽象类, 下面有几个具体的实现类, 来实现抽象类中的抽放方法. Context 为场景类, 场景类聚合策略类就是策略模式啦, 下面用一个 demo 来再说明一下:


两个输入框, 两个按钮, 分别验证输入的是否是纯数字和纯英文, 这里有一个策略类 InputTest, 具体实现类: InputNumTest 和 InputEnglishTest, 场景类: 子类化的输入框类 MRTextField



抽象类 InputTest 里面有个两个方法和一个属性, testInputWithTextField: 用于验证输入, testRegexWithRegix:andText: 用于检测正则, desc 为检测错误时的字段描述.


InputEnglishTest 里面写的和 InputNumTest 一样, 只是正则不同, 就直放上 InputNumTest 的截图啦, InputNumTest 继承自 InputTest 类, 实现其抽象方法, 根据传入的 tf 验证输入是否正确.



子类化的输入框类, 聚合了策略类 InputTest, checkInput 用于检测输入是否正确, desc 为检测错误时的描述, .m 文件实现了 checkInput 方法, 用 self.iputTest 检测输入是否正确.



ViewController.m 里实现了具体代码, 初始化策略类, 当检测的时候调用 [tf checkInput] 即可检测输入了.

这里是 demo的传送门, 如果喜欢的话, 大家可以为这篇文章点个 ❤️, 加个关注呦!


转载于:https://juejin.im/post/5a30962b51882575cb741733

相关文章:

何崚谈阿里巴巴前端性能优化最佳实践

转载:http://www.infoq.com/cn/interviews/hl-alibaba-front-end-performance-optimization 大家好,我现在在阿里巴巴园区采访阿里巴巴中文站架构师,兼B2B网站优化领域的负责人何崚。何崚你好,请简单介绍一下你自己。 我叫何崚&am…

java基础_04

2019独角兽企业重金招聘Python工程师标准>>> 1、java语言的程序结构。Java语言支持3种程序结构:顺序结构、选择结构(分支结构)、循环结构2、顺序结构是最简单、最普遍的一种。java程序如果没有意外都是按照从前到后、从左到右的顺…

会唱歌、会弹琴,清华大学 AI 学生华智冰火了

整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 清华大学计算机系知识工程实验室,开发的中国首个原创虚拟学生——华智冰,与近日亮相。她的声音、肢体动作全部由人工智能完成。 今年6月,清华大学计算机系录取了一位…

22. Node.Js Buffer类(缓冲区)-(二)

转自:https://blog.csdn.net/u011127019/article/details/52512242转载于:https://www.cnblogs.com/sharpest/p/8046463.html

linux安装sphinx

从sphnix网站下载sphinx源码包,当前最新版本是: http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz。当然,还需要保证你的系统已经安装了mysql。其次,就是依照官方的安装指导进行安装了,基本步骤如下:解压…

机器人越像人越好?被机器人盯着会变『蠢』

编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 摘要:人形机器人的凝视会影响人们对社会决策任务的反应方式。 资料来源:IIT 你是否遇到过这种问题,跟别人对是不超过三秒?当你直视别人眼睛的时候&#x…

SQL Server 储存过程的output 参数

要做的参数的回传一方面要做到有储存过程的配合,再一方面也要有调用方法的配合,也就是说错误的调用方法是没有办法把值回传的。 下面是例子 --1、储存过程方面的配合 create procedure dbo.usp_C i as int output ---**注意这里要用output 关键字**--…

JavaScript基础笔记集合(转)

JavaScript基础笔记集合 JavaScript基础笔记集合js简介 js是脚本语言。浏览器是逐行的读取代码&#xff0c;而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在<script>、</script>之内。 <script>可放置在<head>、<body>里 和css一…

Xapian安装

Xapian是一个用C编写的全文检索程序&#xff0c;他的作用类似于Java的lucene。Xapian除了提供原生的C编程接口之外&#xff0c;还提供了Perl&#xff0c;PHP&#xff0c;Python和Ruby编程接口和相应的类库&#xff0c;所以你可以直接从自己喜欢的脚本编程语言当中使用Xapian进行…

IOS开发中多线程的使用

一、创建多线程的五种方式1.开启线程的方法一 NSThread * thread[[NSThread alloc] initWithTarget:self selector:selector(_update) object:nil]; 2.开启线程的方法二 [NSThread detachNewThreadSelector:selector(_update) toTarget:self withObject:nil]; 3.开启线程的方法…

介绍如何用 Python 来绘制高清的交互式地图,建议收藏

作者 |俊欣来源 |关于数据分析与可视化今天小编来为大家介绍一个叫做Folium的模块&#xff0c;我们可以用它来绘制高清的交互式地图&#xff0c;并且标注出重要的地理位置等等&#xff0c;读者在看过本篇文章之后&#xff0c;读者大致会掌握1. 使用Folium来进行交互式地图的绘制…

Pandas Cheat Sheet

Pandas Doc: http://pandas.pydata.org/pandas-docs/stable/10min.html#min 转载于:https://www.cnblogs.com/nuswgg95528736/p/8053582.html

google ProtoBuf开发者指南

目录 1 概览 1.1 什么是protocol buffer 1.2 他们如何工作 1.3 为什么不用XML? 1.4 听起来像是为我的解决方案&#xff0c;如何开始? 1.5 一点历史 2 语言指导 2.1 定义一个消息类型 2.2 值类型 2.3 可选字段与缺省值 2.4 枚举 2.5 使用其他消息…

AI 生成的代码可信吗?编写的代码有 Bug 吗?

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 即使是帮助开发人员编写软件的工具也会产生类似的bug。 目前&#xff0c;大部分的软件开发人员会让 AI 帮助开发者们编写代码&#xff0c;但是开发人员发现 AI 会像程序员的代码一样还是存有 bug。 去年…

嵌入式开发之信号采集同步---VSYNC和HSYNC的作用以及它们两者之间的关系

VSYNC和HSYNC的作用以及它们两者之间的关系 VSYNC和HSYNC的作用以及它们两者之间的关系 VSYNC和HSYNC是什么 VSYNC: vertical synchronization&#xff0c;指与显示器的帧数同步。 简单来说就是启用了VSYNC的渲染过程&#xff0c;帧数不会超过显示器的帧数&#xff0c;一个同步…

对ListenSocket 的研究(四)

对postmaster.c 中的 readmask&#xff0c;rmask,nsocket等进行分析&#xff0c;可以看到&#xff1a;它们之间有如下的关系(与细节无关的代码省略)&#xff1a;复制代码/* * Initialise the masks for select() for the ports we are listenin…

MySQL下的NoSQL解决方案HandlerSocket

目前使用MySQL的网站&#xff0c;多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行&#xff0c;有众多成功的案例&#xff0c;但过于依赖Memcache&#xff0c;无形中让Memcache成为故障的根源&#xff1a; Memcache数据一致性的问题&#xff1a;当MySQL数据变化后&a…

人群距离监测 DeepSOCIAL 最全汉化论文+源码导读

作者 |神经星星来源 |HyperAI超神经By 超神经内容一览&#xff1a;在疫情期间&#xff0c;公共场所中尽量避免人群聚集&#xff0c;可以有效控制疫情扩散。英国利兹大学的研究团队开源了 DeepSOCIAL 人群距离监测项目&#xff0c;通过 YOLOv4SORT 的方式快速实现了这一应用。关…

堆和栈的差别(转过无数次的文章)

一、预备知识—程序的内存分配 一个由C/C编译的程序占用的内存分为下面几个部分 1、栈区&#xff08;stack&#xff09;— 由编译器自己主动分配释放 &#xff0c;存放函数的參数值&#xff0c;局部变量的值等。其 操作方式相似于数据结构中的栈。 2、堆区&…

ARM WFI和WFE指令【转】

本文转载至&#xff1a;http://www.wowotech.net/armv8a_arch/wfe_wfi.html 1. 前言 蜗蜗很早以前就知道有WFI和WFE这两个指令存在&#xff0c;但一直似懂非懂。最近准备研究CPU idle framework&#xff0c;由于WFI是让CPU进入idle状态的一种方法&#xff0c;就下决心把它们弄清…

分享几个用 Python 给图片添加水印的方法,简单实用

作者 |俊欣来源 |关于数据分析与可视化今天来分享几种可以给图片添加水印的方法&#xff0c;都是十分的简单实用&#xff0c;大家在看了之后也可以私底下去自己试试&#xff0c;有些方法需要的代码量就比较少&#xff0c;有些方法需要的代码量就稍微多一些&#xff0c;那我们开…

Apache服务器下使用 ab 命令进行压力测试

ab是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能&#xff0c;主要是显示你安装的Apache每秒可以处理多少个请求. #ab -v可以看出其基本信息 #ab -n1000 -c10 http://localhost:81/t.php 这是一个基本命令 -n1000表示总请求数为…

《Objective-c》Foundation框架 -(字符串:NSString和NSMutableString)

一、NSString&#xff08;不可变字符串&#xff09; 1.创建字符串的方式&#xff1a;&#xff08;利用对象方法&#xff09; 方式一&#xff1a;最快速的创建 方式二&#xff1a; 方式三&#xff1a; 方式四&#xff1a; 方式五&#xff1a;NSUTF8StringEncoding 用到中文就可以…

基于Vue, Vuex 和 ElementUI 构建轻量单页Hexo主题Lite

Hexo Theme Lite Keep Calm, Lite and Writing.light single page blog application theme, using Vue, Vuex, ElementUI and so on. 一款轻量单页博客主题&#xff0c;基于Vue, Vuex 和 ElementUI 构建, 工具语言 Typescript Live Demo Demo | 在线演示 Github 项目地址 Previ…

怎么关闭wordpress评论

1、要是关闭某一篇文章的评论&#xff0c;在发表文章的时候&#xff0c;在下面有个“讨论”&#xff0c;把"允许评论"去掉勾选就可以了。 2、要是关闭所有文章的评论&#xff0c;在“设置”-“讨论设置”把“默认文章设置”中的“允许访客对新文章发表评论 ”不再勾…

ACM-ICPC历届世界总冠军名单1977-2015

为什么80%的码农都做不了架构师&#xff1f;>>> ‍‍‍‍‍‍ ACM-ICPC历届世界总冠军1977-2015 更新时间2016-04-20 17:39 年份总决赛地点冠军大学国家2015年摩洛哥马拉喀什‍‍‍‍聖彼得堡國立資訊科技、機械與光學大學 (破纪录解出全部题目)‍‍‍‍俄罗斯2014…

AI 盯上了外包司机,看后视镜就被扣分,奖金拜拜!

整理 | 梦依丹 来源 | CSDN 生活在科技领先时代的我们&#xff0c;每天无不被算法支配着&#xff0c;从衣食住行到工作中的决策参考。以前在电影中见到的AIer控制人类的场景&#xff0c;越来越现实化。 AI算法不断优化之下&#xff0c;有些企业直接通过AI来给员工打绩效&…

用 Handler 轻松实现专属Android定时器

今年在项目中发现为了实现倒计时、时间段的延迟执行、时间段的轮询执行任务&#xff0c;都是采用Handler postDelayed(runnable,delayMillis). 等等&#xff0c;这有毛病&#xff1f;那你将实现以上功能时、代码大概如下。 Handler handler new Handler()&#xff1b; int cou…

查看Firefox中的缓存

在firefox浏览器中可以在地址栏使用about:cache命令查看当前缓存。 Information about the Cache Service Disk cache device Number of entries:333Maximum storage size:458708 KiBStorage in use:3685 KiBCache Directory:C:\Documents and Settings\Administrator\Local …

技术大咖齐聚爱数智慧人机交互技术论坛 | CNCC2021

CNCC2021【人机交互技术的机遇与挑战】技术论坛将于2021年10月28日13:00-16:00在深圳国际会展中心CC105B召开&#xff0c;本次论坛由CCF主办&#xff0c;爱数智慧创始人兼CEO张晴晴担任论坛主席&#xff0c;邀请来自产学研各界技术大咖&#xff0c;就人机交互、智能语音技术的应…