华山论剑之浅谈iOS的生产线 工厂模式
工厂模式是一种快速创建大量对象的模式.简单易上手,今天我就谈一下我对工厂模式的理解.工厂模式的核心思想就是继承.子类继承父类的方法并且重写父类方法.下面我们就看一下实际中是如何使用工厂模式的.
*** 现在我们需要创建一百个对象,其中五十个是学生对象,五十是老师对象.两者都继承与Person类.
现在我们需要在Person.h中声明一个创建方法.但是在Person.m中不做实现.
#import <Foundation/Foundation.h>@interface Person : NSObject@property(nonatomic,strong)NSString *name;@end复制代码
然后我们需要在Student类中和Teacher类中对createNewObject方法进行方法的实现.当然了,Student类和Teacher类是继承于Person类的.
Student.中代码实现
#import "Person.h"@interface Student : Person@end复制代码
#import "Student.h"@end复制代码
Teacher中代码实现如下
#import "Person.h"@interface Teacher : Person@end复制代码
#import "Teacher.h"@implementation Teacher@end复制代码
下面就需要创建批量生产的初始化工厂PersonFactory.
PersonFactory.h中
#import <Foundation/Foundation.h>@class Teacher;@class Student;@interface PersonFactory : NSObject//声明创建新对象的方法.
+(Student *)createNewStudent;+(Teacher *)createNewTeacher;@end复制代码
PersonFactory.m中
#import "PersonFactory.h"#import "Student.h"#import "Teacher.h"@implementation PersonFactory//实现创建新对象的方法.
+(Student *)createNewStudent{Student *student = [[Student alloc]init];student.name = @"栋哥";return student;}+(Teacher *)createNewTeacher{Teacher *teacher = [[Teacher alloc]init];teacher.name = @"政哥";return teacher;}@end复制代码
这里,我就使用ViewController调用一下createNewObject方法.然后我们就能批量生产带有特定name属性的学生对象和教师对象了.
#import "ViewController.h"#import "Teacher.h"#import "Student.h"#import "PersonFactory.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];Teacher *teacher = [PersonFactory createNewTeacher];NSLog(@"%@",teacher.name);Student *student = [PersonFactory createNewStudent];NSLog(@"%@",student.name);}@end复制代码
通过上面的方法,我们只能批量创建一些带有特殊属性的对象,如果现在我们需要把这些对象全部改变成另外的对象,我们改如何做呢? 这就需要我们再一步的细分我们的工厂.Person工厂中只做方法的声明,在Student工厂和Teacher中做出方法的实现.
PersonFactory.h中
#import <Foundation/Foundation.h>@class Person;@interface PersonFactory : NSObject//只在.h中做方法的声明,在.m中不做方法的实现.
+(Person *)createNewObject;@end复制代码
StudentFactory.m中
#import "StudentFactory.h"#import "Student.h"@implementation StudentFactory+(Person *)createNewObject{Student *student = [[Student alloc]init];student.name = @"栋哥";return student;}@end复制代码
同样.TeacherFactory.m中.
#import "TeacherFactory.h"#import "Teacher.h"@implementation TeacherFactory+(Person *)createNewObject{Teacher *teacher = [[Teacher alloc]init];teacher.name = @"政哥";return teacher;}@end复制代码
然后我们在ViewController中创建我们的两种对象.
#import "ViewController.h"#import "Person.h"#import "PersonFactory.h"#import "StudentFactory.h"#import "TeacherFactory.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];Person *teacher = [TeacherFactory createNewObject];NSLog(@"%@",teacher.name);Person *student = [StudentFactory createNewObject];NSLog(@"%@",student.name);}@end复制代码
如上,如果我们需要在对我们的两种对象创建做修改只需要修改我们的生产工厂的类中的代码就行,不需要修改我们徐如其他地方的代码了,大大的减省了冗杂度和耦合度,今天的iOS工厂模式就到此结束了,希望这一篇文章能对您有所帮助.?
华山论剑之浅谈iOS的生产线 工厂模式相关推荐
- python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...
- 1、从王者荣耀浅谈设计模式(简单工厂模式)
姓名:简单工厂模式 英文名:factory method Pattern 价值观:容易扩展 王者荣耀的英雄一个个阶段性的上线,有射手.坦克.刺客等等,每个英雄的类型,技能,级别都不一样, 这里主要举个 ...
- 华山论剑之浅谈iOS文字印章的实现(NSMutableAttributedString和NSTextAttachment实现图文混编)
夫人之相与,俯仰一世,或取诸怀抱,悟言一室之内:或因寄所托,放浪形骸之外.虽趣舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,曾不知老之将至.及其所之既倦,情随事迁,感慨系之矣. 前言 上面的一张 ...
- iOS实录15:浅谈iOS Crash
导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...
- 浅谈iOS和Android后台实时消息推送的原理和区别
http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...
- 运用计算机优化教学的方法,浅谈计算机基础课程教学模式的优化对策论文
计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网.通信.多媒体等领域的应用取得了不错的成绩.1996年至2009 年,计算机用户数量从原来的63 ...
- 浅谈命令查询职责分离(CQRS)模式
浅谈命令查询职责分离(CQRS)模式 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复 ...
- iOS开发-简单工厂模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...
- 浅谈开发中的MVVM模式及与MVP和MVC的区别
2019独角兽企业重金招聘Python工程师标准>>> 我记得前段时间分享了一篇文章< 浅谈Andorid开发中的MVP模式>(点击可跳转),反响不错,为了进一步介绍MV ...
最新文章
- 1 分钟 Serverless 部署掌上游戏机,“一行命令”找回小时候的乐趣!
- 注册表只改一个值 马上加快宽带上网速度
- MySql数据的启动和停止以及SQLyog图形化工具的下载
- 计算机网络第1章概述
- 使用smtplib库隐藏授权码发送邮件
- wireshark使用教程
- 利用Powrshell 查看在2000万信息中看看自己在不在所谓的开房信息中!
- IE Tab 让Chrome兼容IE
- 蓝桥ROS机器人系统更新和功能包安装记录
- 推荐一个朋友 - 学历不好,非科班,不负光阴终进大厂
- 数据流标准差计算方法-不用事先计算均值
- 恒太照明在北交所上市:募资规模缩水三成,第三季度收入下滑
- 告别调参,AutoML新书发布
- 短信接口调用-手机短信,验证码
- 系列学习 docker 之第 5 篇 —— Docker 常用命令
- linux7 mysql vbox_mysql安装 Vbox下安装Linux并安装Mysql
- E盘显示无法访问位置不可用的资料找回办法
- 【大话存储II】学习笔记(18章),数据前处理和后处理
- 漠岚php文件操作类,php文件操作
- 腾讯电脑管家发布8.0正式版
热门文章
- linux ubuntu无法登陆,新手入门求解答!ubuntu命令创建用户无法登入问题!
- mysql修改主键属性_mysql如何改变主键属性
- eltable刷新整个表格方法_Word表格函数计算怎么做?都在这篇!
- 怎么git 自己建的服务器_Git服务器搭建,以及Git基本操作
- 关于 #!/bin/bash脚本头文件的类型说明
- ugui 转轮_Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)...
- linux更新驱动脚本,编写Linux驱动常见错误(不断更新)!
- 遇见BUG(1):都是非时钟专用引脚惹的祸?
- 洛谷 题解 CF910C 【Minimum Sum】
- Spring mvc集成log4j2