美文网首页
iOS设计模式

iOS设计模式

作者: iOS_tree | 来源:发表于2023-12-16 11:05 被阅读0次

    设计模式有许多,常用的有单例模式、委托模式、观察者模式等。

    1.单例模式

    单例模式保证了在程序生命周期中,只创建一个类对象,且便于外界访问。数据只需要单独保存一份的情况下我们多使用单例模式,系统的有UIApplication、NSNotificationCenter、NSBundle、NSFileManager, NSUserDefault等都是单例模式,除系统固定的单例模式外,我们一般的用户信息管理、网络请求、数据查询、日志管理等都适用于单例模式的情形。
    优点:单例可以使使用者可以很快获取到对象的属性、信息。单例长期存在在内存中,不需要重复创建和销毁。
    适用范围为只需要一个对象保存数据的对象且需要全局使用的数据或方法。

    2.代理设计模式(委托模式)

    在iOS开发中,委托模式是一种较常见的模式,使用@protocol和设置delegate进行实现。系统中常见的有UITableView、UITextField等Delegate,分为数据代理和事件响应代理。
    数据代理为通过调用代理对象的方法获取需要显示的数据,比如UITableView的dataSource。
    事件代理为通过调用代理对象的方法来告知代理对象发生了某种事件需要进行处理,比如UITableView的delegate。
    代理对象实现protocol的方法来实现对应的功能。
    我们通常使用委托者模式来进行View的事件回调处理、一些类的业务逻辑的回调处理比如蓝牙连接成功。
    委托模式使用简单,逻辑清晰,使用时注意使用weak指针即可。
    适用范围为数据回调、事件回调等情况。

    3.观察者模式

    在iOS中,观察者模式可以有两种常用的实现方法,分别为notification和KVO机制(Key-value Observing)。
    其中notificaiton通知机制在大部分情况下是可以和委托者模式互换实现相同功能逻辑。
    notification模式的步骤为观察者注册监听通知,等待其他对象在合适的时机发送通知,观察者接收到通知,处理响应的业务逻辑。在业务逻辑不需要的时候移除通知。
    系统的通知有比如观察app是否进入后台、是否进入前台进行激活等。
    优点:可以进行一对多的通知,两个对象之间无耦合性。缺点为逻辑没有委托模式清晰。
    适用范围为一个事件触发多个业务逻辑时或者不关心事件触发后的逻辑情况,可以替代委托模式。
    KVO依赖于对对象属性的监听。
    使用步骤为添加对某个对象属性的监听,在对象属性发生变化时触发监听方法,从而进行对应的业务逻辑处理。
    比如监听网页的加载进度。
    我们可以使用来监听某个数据模型的属性是否发生改变,若监听到发生改变则在显示或业务逻辑进行对应的处理。
    优点:可以在不改变监听对象代码的情况下监听对象属性的变化,及时知道属性的最新只。
    缺点:需要触发属性的set方法才会触发监听方法的调用。
    适用范围为无法修改对象的源代码或者不想修改源代码的情况下监听对象的属性值的变化。

    4.原型设计模式

    以一个已经创建的实例为原型,提供复制该对象来创建新的对象,使用者无需关系对象创建的细节。如iOS中的copy方法,在用户使用时会快速复制出一个新对象,而没有过多的代码。

    5.工厂方法设计模式

    对创建对象的过程和细节进行封装,用户使用时无需关心对象创建过程的细节,即可得到创建好的对象并可直接使用。

    6.抽象工厂设计模式

    将多个类的对象创建集方法中到一个类中,用户无需知道该对象创建的具体细节,即可使用该类创建出各种不同需要的对象。

    7.建造者模式

    当类的属性中含有其他类时,创建该类对象及类对象的属性类对象,并对两种及两种以上的对象进行组装时,我们称其为建造者模式。建造者模式在创建对象时,会帮我们把一个对象的嵌套对象一并创建,而我们无需关心多个对象的创建过程和细节。

    8.适配器设计模式

    将一个类的接口转换成另外的接口,使得原本不兼容接口的类可以一起工作。
    在版本兼容中比较常见,原有模型字段和新模型字段不一致时,我们通过一个转换方法,将原模型转换为新模型,使原有数据可以兼容新的版本。如原模型为name,新模型为newname时,可以把name值赋值在newname上,保证新版本系统可以正确读取到name这个属性。

    9.桥界设计模式

    将抽象与实现分离,用组合关系来替代继承关系,从而给类更多的扩展性,降低类之间的耦合。
    当对象有不同特性时,我们使用不同的属性代表不同的特性,而不使用子类来代表不同特性时,则为侨界模式。

    10.装饰设计模式

    在不改变对象结构的情况下,为该对象增加一些功能。

    11.外观设计模式

    当一个系统功能越来越多时,涉及的类也会越多,各种类之间的交互也会越来越多,这是如果提供一个类来统一处理这些类的交互,我们则称为外观设计模式。

    12.享元设计模式

    当我们需要创建大量重复对象时,对象中有共享某个属性,我们可以把该属性独立出来,给所有对象共同使用,可以节省很多内存空间。此模式则称为享元模式。

    13.组合设计模式

    当采用树状结构来表示整体与部分的关系时,则称为组合设计模式。例如系统的文件数据结构。

    14.模板方法设计模式

    定义一个操作流程中的主要步骤,将流程中的部分环节实现下放到子类中实现,使得子类可对部分环节进行定制,则称为模版方法设计模式。

    15.策略设计模式

    预先写出多种行为方法,我们对不同行为方法进行组合,形成各种不同的流程,称为策略模式。

    16.命令设计模式

    当我们需要对某个对象调用各种不同的方法是,我们可以选择合成一个方法,然后以不同参数进行调用,而不关心实现细节,可称为命令模式。如对汽车对象发送开关窗、解闭锁命令等,命令作为函数参数进行传入。

    17.责任链设计模式

    当一个对象或事件需要经过多个对象逐一处理时,我们可以使用责任链模式,直至对象或者事件处理完成。iOS中的触摸事件处理为责任链设计模式的典型案例。

    18.状态设计模式

    状态设计模式为当一个类的状态比较复杂时,对状态进行单独定义为类。

    20.中介者设计模式

    中介者设计模式为将不同对象之间的网状关系转换为星形结构,各对象之间的逻辑交互交由中介类来处理,简化各对象之间的关系处理,减少原有各类之间的耦合性。

    21.迭代器设计模式

    迭代器设计模式体现在元素集合的遍历,当用户需要遍历某个集合时,提供一个遍历的方法给用户,用户无需关系遍历方法的细节即可遍历集合中的所有元素。

    22.访问者设计模式

    当同一个对象需要被不同类对象读取和修改数据时,我们可以在不同类的方法中创建相同名字的方法,传入需要读取修改的对象,被传入的对象不能对自己进行修改操作,则称为访问者模式。

    23.备忘录设计模式

    在不破坏原有封装的情况下,对对象的状态进行保存,在需要时可以随时恢复到保存的状态。在游戏开发中,此模式可以用于保存用户角色的状态。

    24.解释器设计模式

    定义一种简洁的语言规则,通过实现一个解析器,对传进来的语言进行解读,从而实现对应的逻辑。正则表达式为解释器设计模式的一种实践。

    相关文章

      网友评论

          本文标题:iOS设计模式

          本文链接:https://www.haomeiwen.com/subject/bxfngdtx.html