zoukankan      html  css  js  c++  java
  • iOS重一些常用的代理模式

    (一)代理模式

    应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。
    优势:解耦合
    敏捷原则:开放-封闭原则
    实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。
    列表row个数delegate
    自定义的delegate


    (二)观察者模式
    应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。
    优势:解耦合
    敏捷原则:接口隔离原则,开放-封闭原则
    实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。
    kvo,键值对改变通知的观察者,平时基本没用过。
    (三)MVC模式
    应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。
    优势:使系统,层次清晰,职责分明,易于维护
    敏捷原则:对扩展开放-对修改封闭
    实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。


    (四)单例模式
    应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
    优势:使用简单,延时求值,易于跨模块
    敏捷原则:单一职责原则
    实例:[UIApplication sharedApplication]。
    注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。
    java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。
    object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,
    返回的也只是此单例类的唯一静态变量。


    (五)策略模式
    应用场景:定义算法族,封装起来,使他们之间可以相互替换。
    优势:使算法的变化独立于使用算法的用户
    敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。
    实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。
    注意事项:1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类
    2,变化的行为抽象基类为,所有可变变化的父类
    3,用户类的最终实例,通过注入行为实例的方式,设定易变行为
    防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。


    (六)工厂模式
    应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。
    优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。
    敏捷原则:DIP依赖倒置原则
    实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换
    注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,
    增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。

  • 相关阅读:
    《Microsoft Sql server 2008 Internals》读书笔记第十一章DBCC Internals(2)
    《Microsoft Sql server 2008 Internals》读书笔记第十一章DBCC Internals(9)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(10)
    CKEditor在asp.net环境下的使用一例
    《Microsoft Sql server 2008 Internals》读书笔记第五章Table(7)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(11)
    千万数据的连续ID表,快速读取其中指定的某1000条数据?
    javascript中的float运算精度
    .Net与Java的互操作(.NET StockTrader微软官方示例应用程序)
    《Microsoft Sql server 2008 Internals》读书笔记第十一章DBCC Internals(6)
  • 原文地址:https://www.cnblogs.com/FZP5/p/5708621.html
Copyright © 2011-2022 走看看