iOS当中的设计模式

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

  • 观察者模式 
    应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。 
    优势:解耦合 
    敏捷原则:接口隔离原则,开放-封闭原则 
    实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。 
    kvo,键值对改变通知的观察者。

  • MVC模式 
    应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。 
    优势:使系统,层次清晰,职责分明,易于维护 
    敏捷原则:对扩展开放-对修改封闭 
    实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。如下图所示: 
    MVC

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

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

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


    原文点击打开链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#的dllimport使用方法详解

DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL(托管/非托管是微软的.net framework中特有的概念,其中,非托管代码也叫本地(native)代码。与Java中的机制类似&…

VS2010中 C++创建DLL图解

一、DLL的创建 创建项目: Win32->Win32项目,名称:MyDLL 选择DLL (D) ->完成. 1、新建头文件testdll.htestdll.h代码如下:#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimp…

使用公用表表达式的递归查询

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。公用表表达式 (CTE) 具有一个重要的长处,那就是可以引用其自身。从而创建递归 CTE。递归 CTE 是一个反复运行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递归 CTE 时…

C#委托实现C++ Dll中的回调函数

from:https://blog.csdn.net/ferrycooper/article/details/63261771很多的Dll都是C和C写的,那么如果C#想要调用Dll中的函数怎么办,尤其是Dll函数其中一个参数是函数指针的,即里面有回掉函数的用C#怎么实现? C中的回掉函数在C#中有…

15个最好的HTML5前端响应式框架(2014)

文中的多个框架基于SASS创建,SCSS是一种比LESS更简洁的样式表编程语言,它能够编绎成CSS,可复用CSS代码,声明变量,甚至是函数,类Ruby/Python的语法。參见: LESS vs SASS?选择哪种CSS样…

【转载】Direct3D基础知识

原文:Direct3D基础知识 重新从头开始学习DX,以前太急于求成了,很多基础知识都没掌握就开始写程序了,结果出了问题很难解决.1. D3D体系结构D3D与GDI处与同一层次,区别在于,D3D可以使用HAL(Hardware Abstraction Layer)通过DDI来访问图形硬件,充分发挥硬件性能.…

关于Xcode隐藏打印的logs的方法

https://www.cnblogs.com/jukaiit/p/5881062.html 第一步: 第二步: 第三步: 添加参数: Name :OS_ACTIVITY_MODE Value : disable

指针函数与函数指针的区别

首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。 类型标识符 *函数名(参数表)int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用…

C++走向远洋——63(项目二2、两个成员的类模板)

*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello * 完成日期:2016年6月4日 * 版本号:V1.0 * 问题描述&…

iOS 抓包工具 charles工具

在Charles官网下载最新的 安装包 在电脑上安装完成之后,以 注册码 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 进行注册即可完成 在手机上面设置代理:输入电脑的网络IP以及端口号 以下为查找的步骤: 在手机上手…

写一个Android输入法01——最简步骤

本文演示用Android Studio写一个最简单的输入法。界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点。 1、打开Android Studio创建项目,该项目和普通APP的不同之处在于它不需要添加任何Activity:我给该输入法命名为…

谈谈自己对于Auth2.0的见解

Auth的原理网上有很多,我这里就不在赘述了。 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这个流程,模拟了下部分代码,当然是…

iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改变,将此事件一直传递下去程序运行过程中屏幕方向改变会调用- (void)viewWillTransitionToSize:…

C++ Vector 汇总

C vector erase函数最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项。 在Cprimer中对c.erase(p) 这样解释的:c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

继上次”vNext之旅(1):从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间。起因 在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime…

C++中模板使用详解

转自:http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值&#xf…

腾讯2016春招安全岗笔试题解析

腾讯2016春招安全岗笔试题解析 昨天(4月2日)晚上7:00到9:00做了腾讯春招安全岗的笔试题。下面解析一下: 题目解析 1 在生成随机数前用当前时间设置随机数种子应该是安全的。如果程序用固定的数产生随机数,其结果也是固定的。如果用…

VS项目属性的一些配置项的总结(持续增加。。。)

首先,解决方案和项目文件夹包含关系(c项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系:假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层…

子元素增加margin-top会增加给父元素的问题

假设我们有如下代码 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Zend Studio使用教程之升级Zend Studio(1/3)

2019独角兽企业重金招聘Python工程师标准>>> Zend Studio是新一代的专业级智能PHP IDE&#xff0c;它旨在帮助开发人员提高工作效率&#xff0c;创造出高品质的PHP应用程序&#xff01;它包含了PHP开发所必须的部件&#xff0c;通过一整套的编辑、调试、分析、优化和…