iOS设计模式

iOS设计模式——生成器模式

我与影子孤独终老i 提交于 2020-03-02 20:00:23
选择建造自己的房子的人会把工程外包给承包商。单一承包商不能建造整个房子,他将其分解为几个部分,然后转包给几个实际的建筑商,他们懂得如何将零部件组装起来。房子由由风格、颜色和尺寸各不相同的部件组成。客户告诉承包商房子里都要有什么,然后承包商协调各房屋建筑商,决定需要做什么。应该如何建造,建筑商就如何施工。建房子是个复杂过程,单凭一双手就想建房子,即便可能也非常困难。如果承包商(指导者)与懂得如何建造的建筑商相互协调,这一过程简单得多且更易管理。 有时,构建某些对象有多种不同方式。如果这些逻辑包含在构建这些对象的类的单一方法中,构建的逻辑就会变得非常复杂(比如,针对各种构建需求的一大片嵌套if-else或者switch-case语句)。如果能够把构建过程分解为客户——指导者——生成器的关系,那么过程将更容易管理与复用。针对此类关系的设计模式称为生成器。 何为生成器模式? 除了客户与其所要的产品,生成器模式还包含两个重要角色:Director(指导者)和Builder(生成器)。Builder知道究竟如何在缺少某些特定信息的情况下建造产品。Director知道Builder应该建造什么,以参数向其提供缺少的信息来建造特定产品。虽然Director知道Builder应该建造什么,这并不意味着Director知道具体Builder究竟是什么。 Builder是一个抽象接口

iOS 中的 Delegate 设计模式

落爺英雄遲暮 提交于 2020-02-05 12:46:39
最近写的 iOS/Swift 代码比较多,很久没动笔又没怎么写过技术类的文章。所以决定从小小的总结一下 Delegate 模式开始写一写,因此这也是一篇入门文章。 What is Delegate ? 我想很多同学第一次遇见 Delegate 这个词是在写 tableView 的时候。那时候我也只是每每需要用的时候就照着这种模式写上 tableView.delegate = self, tableView.dataSource = self 也并不理解究竟是什么意思。 应该说 delegate 是 Cocoa/CocoaTouch 中的一种设计模式,正如前面提到的 tableView 一样,Cocoa 框架中很多地方都用到了这种设计模式。这种设计模式中我们可以将一个对象的一些功能委托给另一个对象来实现。因此使用 delegate 模式可以帮助我们设计出更松耦合的代码。 delegate 使用起来非常简单。假设我们现在需要一个电视机和一个音响,我们想要将电视机播放声音的职责委托给外置的音响来实现,我们就可以这样编写: 12345678910111213141516171819202122232425262728 // 首先定义一个 Protocol 协议protocol PlayAudioDelegate { func playAudio()}// 编写一个遵循

IOS设计模式-备忘录模式

不打扰是莪最后的温柔 提交于 2019-12-20 18:29:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、如何存储记录 在存储记录时,第一步我们需要用一把钥匙去打开一把锁。第二步,当我们打开锁之后就会有黑盒子,我们一开始还不知道里面有什么,所以是黑盒子。 1、存储记录的必要性 生活中,比如去超市购物有时候就需要在入口储物柜存放自己的包裹 2、记录的唯一标示 储物柜对应一把钥匙和号码标示。 3、存储记录与取出记录 =============================================================================================== 根据上面的思维导图:备忘录模式有:1.有key值(唯一标示符) 2.获取与key对应的存储物品 3.可以存储多样性的对象。 备忘录模式的UML图: 2、备忘录模式的基本原理 Originator起因;起源;创作者;发起人,对象:能够生成备忘录中心的状态值 Memento纪念品,记录,备忘录中心,能够将对象生成的备忘录中的状态值进行存储或者取出值 Caretaker看门人,备忘录中心存在黑箱子里的物品   设计存储中心,比如超市里的储物柜   指定存储接口,   实现存储机制, 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一

iOS设计模式之桥接模式

匿名 (未验证) 提交于 2019-12-02 23:59:01
一,什么是桥接模式 定义 抽象出层次结构。 上层抽象接口的职能,实现上层抽象接口的职能,层级间的通信协议(可以抽象为接口)。 桥接模式的目的,就是把抽象层次结构从具体的实现中分离出来,使其能够独立变更。抽象层次定义了供客户端使用的上层抽象接口。实现结构定义了供抽象层使用的底层接口。实现类的引用被封装到控制类抽象层的实例中,桥接就形成了。 使用场景 游戏机模拟器、H5混编解决方案 二,桥接模式结构图    实现步骤 : 创建控制类基类,并定义变量持有具体实现类基类对象关系。 创建控制类基类子类,和实现类基类,并在控制器类接口方法中使用基类实现类对象实现功能(基类已经让控制器建立了持有实现类对象的关系)。 在控制器内调用控制器子类,建立控制器持有实现类对象。    结构图 :    三,代码实现 基类 控制器基类 ConsoleController ConsoleController.h #import <Foundation/Foundation.h> #import "ConsoleEmulator.h" @interface ConsoleController : NSObject /** * 抽象模拟器 */ @property (nonatomic, strong) ConsoleEmulator *emulator; /** * 执行指令 * * @param

iOS设计模式之适配器模式

匿名 (未验证) 提交于 2019-12-02 23:59:01
一,适配器的定义 定义 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 需求场景 需要使用以前开发的“一些现存的对象”,但是新环境中要求的接口是这些现存对象所不满足的 二,适配器的结构图   实现步骤: 定义接口,规范适配器的功能 定义适配器父类,便于各个子类的对于接口功能的实现 子类适配器继承父类适配器,实现子类下的接口功能 父类指针指向子类,调用子类的实现方法   结构图: 三,代码示例 接口协议 CellPhoneProtocol.h /** * @brief 面向接口编程,协议负责定义适配接口 */ @protocol CellPhoneProtocol < NSObject > - ( NSString *) name ; - ( NSString *) playMusic ; - ( NSString *) playMovie ; 父类适配器 CellPhone.h @interface CellPhone : NSObject < CellPhoneProtocol > @property ( nonatomic , strong ) id data ; //生成子类接受数据的变量 - ( instancetype ) initWithData :( id ) data ; //便于子类接受数据源

iOS设计模式(02):单例模式

↘锁芯ラ 提交于 2019-11-28 19:00:24
什么是单例模式? 单例模式 是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在iOS开发中,单例模式是非常有用的一种设计模式。如下图,是一个简单的例模式的UML类图。 iOS SDK中也有许多类使用了单例模式,例如, UIApplication :当程序启动的时候,会调用UIApplicationMain方法,在该方法中,会实例化一个UIApplication对象,之后在程序中的任意地方调用sharedApplication方法都将返回一个与当前应用程序相关的UIApplication实例(UIApplicationMain方法中创建的UIApplication单例)。 什么时候使用单例模式? 在程序中,单例模式经常用于只希望一个类只有一个实例,而不运行一个类还有两个以上的实例。当然,在iOS SDK中,根据特定的需求,有些类不仅提供了单例访问的接口,还为开发者提供了实例化一个新的对象接口,例如,NSFileManager可以通过defaultManager方法返回相同的一个NSFileManager对象。如果需要新的一个NSFileManager实例对象,可以通过init方法。 iOS中单例模式的实现 iOS中单例模式的实现方式一般分为两种:Non-ARC(非ARC)和ARC+GCD。 1.Non-ARC(非ARC) 非ARC的实现方法如下所示: