模板方法模式定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。模板方法模式是由子类决定实现算法中的步骤,工厂方法由子类决定实现哪一个具体的类,策略模式是封装可以互换的行为,使用委托决定采用哪一个行为,有的时候这三种容易出现理解上的偏差。

基础知识

模板方法的UML类图:

关于模板方法我们思考一个生活中的例子,我们都会网购,天猫或者京东,经历一下四个步骤,①访问网站②浏览下单③支付④收货,两种网站第二步和最后一步都是一样的,访问和支付的访问不一样,两个网站网址不一样,支付方式不一样~稍微思考一下可以怎么实现~

实战探讨

关于上面的需要设计三个类,网购类,天猫类,京东类:

OnLineShop:

@protocol OnLineShopProtocol@optional
-(void)accessURL;
@optional
-(void)pay;@end@interface OnLineShop : NSObject<OnLineShopProtocol>-(void)shop;-(Boolean)callMyMobileHook;@end

@interface OnLineShop()-(void)createOrder;-(void)receiptGoods;@end@implementation OnLineShop-(void)shop{[self accessURL];[self createOrder];[self pay];if ([self callMyMobileHook]) {[self receiptGoods];}
}-(void)createOrder{NSLog(@"创建订单成功");
}-(void)receiptGoods{NSLog(@"收到了物品");
}
//子类可以回调钩子
-(Boolean)callMyMobileHook{return true;
}@end

Tmall类继承自OnLineShop:

@implementation Tmall-(void)accessURL{NSLog(@"https://www.taobao.com/");
}-(void)pay{NSLog(@"支付宝");
}-(Boolean)callMyMobileHook{return true;
}@end

JDong类:

@implementation JDong-(void)accessURL{NSLog(@"http://www.jd.com/");
}-(void)pay{NSLog(@"货到付款");
}-(Boolean)callMyMobileHook{NSLog(@"博客园-FlyElephant");return false;
}@end

代码测试:

    OnLineShop  *tmall=[[Tmall alloc]init];[tmall shop];OnLineShop *jd=[[JDong alloc]init];[jd shop];

测试结果:

模板方法优点:

①模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

②子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,

③通过子类扩展增加新的行为,符合“开放-封闭原则”。

缺点

①每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

适用于在某些类的算法中,用了相同的方法,造成代码的重复。 控制子类扩展,子类必须遵守算法规则。

模板方式中涉及到一个原则是好莱坞原则,别调用我们,我们会调用你~理解起来就是高层组件可以调用底层组件,底层组件不要调用高层组件~

iOS开发-模板方法模式相关推荐

  1. iOS开发夜间模式的设置(主题切换)

    iOS开发夜间模式的设置(主题切换) 很长一段时间没有写博客了.想到自己最近刚好做了不少重构,刚好可以总结一下. 夜间模式,很多阅读类的或资讯类的App都会这个功能.以前自己也做过,现在把它抽出来封装 ...

  2. iOS开发 黑暗模式

    iOS 13终于引来了暗黑模式. 每当新特性的到来,iOS开发者们既紧张又有点小兴奋,怀揣着被虐的心态,让我们来看看暗黑模式到底是个啥. 虽然这是一个设计驱动的需求,但是本着一颗虔诚(暴躁)的心,我们 ...

  3. iOS开发-策略模式

    策略(Strategy)模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.策略模式是对算法的包装,是把使用算法的责任和算法本身分割开 ...

  4. [iOS开发]工厂模式

    工厂模式是创建型模式,它的作用是创建对象.具体来说,常见的工厂模式包括简单工厂模式,工厂方法模式和抽象工厂模式三种. 简单工厂模式(Simple Factory Pattern) 构成 工厂类 工厂类 ...

  5. iOS开发一路走来看到,好奇,好玩,学习的知识点记录

    AutoreleasePool http://blog.sunnyxx.com/2014/10/15/behind-autorelease/ http://blog.leichunfeng.com/b ...

  6. iOS开发-简单工厂模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...

  7. (iOS开发总结)MVC模式

    一.MVC 模式 MVC,即模型-视图-控制器(Model-View-Model),是软件开发中应用甚广的一种设计模式.其用意是将数据与视图分化,利用模型数据控制视图的显示,但两者的交互由控制器控制. ...

  8. 通知模式实现两个textField传值及模态视图——iOS开发

    通知模式实现两个textField传值及模态视图--iOS开发 利用通知模式,实现两个不同界面的textField之间的传值,在界面二输入字符,传值到前一界面的textField. 界面的切换,这里临 ...

  9. iOS开发的架构模式

    iOS开发的架构模式 0.VIPER 为了减轻Controller层负担的方法,而VIPER架构其实是将Controller再细分成三层,分别是View.Interactor.Presenter,已达 ...

最新文章

  1. php 点击表头排序,TP5+ajax实现点击表格表头切换排序,带分页
  2. uva11991 Easy Problem from Rujia Liu?
  3. Eclipse修改项目编码
  4. python用户标识符条件_使用sum(if…)或条件语句操作两个数据集,这些语句没有hivehadooppython的公共标识符...
  5. LeetCode 6 - ZigZag Conversion
  6. Oracle树查询(查询所有子节点,父节点等等)_转载
  7. memcache/redis 缓存学习笔记
  8. 初二的孩子,开学考下滑得很厉害,怎么办?
  9. 如何获得Android设备名称(ADB命令详细介绍)
  10. 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied
  11. FLEX 字符串处理函数
  12. CREO:CREO软件之零件【模型】曲面之填充曲面、拉伸曲面、旋转曲面的简介及其使用方法(图文教程)之详细攻略
  13. linux shell脚本教程
  14. Postman 中文包使用
  15. 甘超波:NLP信念系统
  16. 湖南生物机电职院信息技术学院召开第一届思政工作会议
  17. node-java_node-jvm
  18. 前端基础知识学习总结--百分比布局、Flex布局
  19. panda3d python教程_图解 Panda3D引擎开发入门
  20. 字节跳动将双月OKR调整为季度;马斯克批OpenAI违背初心:被微软控制,只顾赚钱;苹果上新348元省电保护膜|极客头条...

热门文章

  1. 基于用例点来度量软件规模并管理进度 之三
  2. 惠普打印信息页无法连接到服务器,惠普M400系列打印机网络连接无法打印怎么办?...
  3. 不知因果,何以谈优化?
  4. 中商惠民李超:500,000+ 便利店背后的精细化管理
  5. Flask 教程 第十八章:Heroku上的部署
  6. 应用交付:从技术到服务
  7. 活久见的重构 - iOS 10 UserNotifications 框架解析
  8. 模式识别之Shape Context---利用Shape Context进行形状识别
  9. oracle 11g数据库启动错误总结
  10. 质量意味着在没有人看的时候把它做对