zoukankan      html  css  js  c++  java
  • iOS 开发中常见的设计模式

    最近有小伙伴问到在iOS开发中的几种设计模式,这里摘录一下别人的总结(因为已经感觉总结得差不多了,适用的可以阅读一下)

    首先是开发中的23中设计模式分为三大类:1.创建型 2.结构型 3.行为型 (iOS常用大概6种)

    创建型

    1. Factory Method(工厂方法)

    2. Abstract Factory(抽象工厂)

    3. Builder(建造者)

    4. Prototype(原型)

    5. Singleton(单例)

    结构型

    6. Adapter Class/Object(适配器)

    7. Bridge(桥接)

    8. Composite(组合)

    9. Decorator(装饰)

    10. Facade(外观)

    11. Flyweight(享元)

    12. Proxy(代理)

    行为型

    13. Interpreter(解释器)

    14. Template Method(模板方法)

    15. Chain of Responsibility(责任链)

    16. Command(命令)

    17. Iterator(迭代器)

    18. Mediator(中介者)

    19. Memento(备忘录)

    20. Observer(观察者)

    21. State(状态)

    22. Strategy(策略)

    23. Visitor(访问者)


    一、代理模式

      应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。

      优势:解耦合

      敏捷原则:开放-封闭原则

      实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。

      列表row个数delegate

      自定义的delegate

    二、观察者模式

      应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。

      优势:解耦合

      敏捷原则:接口隔离原则,开放-封闭原则

      实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。

      kvo,键值对改变通知的观察者。

    三、MVC模式(我感觉MVC应该不是归类到设计模式)

      应用场景:非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。

      优势:使系统,层次清晰,职责分明,易于维护

      敏捷原则:对扩展开放-对修改封闭

      实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。

    四、单例模式

      应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

      优势:使用简单,延时求值,易于跨模块

      敏捷原则:单一职责原则

      实例:[UIApplication sharedApplication]。

      注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。

      java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。

      object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,

      返回的也只是此单例类的唯一静态变量。

    五、策略模式(使用较少)

      应用场景:定义算法族,封装起来,使他们之间可以相互替换。

      优势:使算法的变化独立于使用算法的用户

      敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。

      实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。

      注意事项:   1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类

            2,变化的行为抽象基类为,所有可变变化的父类

            3,用户类的最终实例,通过注入行为实例的方式,设定易变行为

      防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。

    六、工厂模式

      应用场景:工厂方式创建类的实例,多与代理模式配合,创建可替换代理类。

      优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。

      敏捷原则:DIP依赖倒置原则

      实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换


      注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,


      增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。


  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/somethingWithiOS/p/5689024.html
Copyright © 2011-2022 走看看