iOS开发-模板方法模式

简介:
+关注继续查看

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

基础知识

模板方法的UML类图:

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

实战探讨

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

OnLineShop:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@protocol OnLineShopProtocol
 
@optional
-(void)accessURL;
@optional
-(void)pay;
 
@end
 
@interface OnLineShop : NSObject<OnLineShopProtocol>
 
-(void)shop;
 
-(Boolean)callMyMobileHook;
 
@end

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@implementation Tmall
 
-(void)accessURL{
    NSLog(@"https://www.taobao.com/");
}
 
-(void)pay{
    NSLog(@"支付宝");
}
 
-(Boolean)callMyMobileHook{
    return true;
}
 
@end

JDong类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@implementation JDong
 
-(void)accessURL{
    NSLog(@"http://www.jd.com/");
}
 
-(void)pay{
    NSLog(@"货到付款");
}
 
-(Boolean)callMyMobileHook{
    NSLog(@"博客园-FlyElephant");
    return false;
}
 
@end

代码测试:

1
2
3
4
OnLineShop  *tmall=[[Tmall alloc]init];
[tmall shop];
OnLineShop *jd=[[JDong alloc]init];
[jd shop];

测试结果:

模板方法优点: 

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

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

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

缺点

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

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

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

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/5126158.html,如需转载请自行联系原作者


相关文章
|
9天前
|
移动开发 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
Ipa Guard是一款功能强大的ipa混淆工具,不需要ios app源码,直接对ipa文件进行混淆加密。可对IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加ipa破解反编译难度。可以对图片,资源,配置等进行修改名称,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5类app。
|
20天前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
91 0
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
24天前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
33 1
|
24天前
|
移动开发 小程序 JavaScript
uniapp开发打包ios应用踩坑记
iOS 设备的一个唯一识别码,每台 iOS 设备都有一个独一无二的编码,这个编码,我们称之为识别码,也叫做UDID
23 0
|
27天前
|
API 数据安全/隐私保护 iOS开发
 利用uni-app 开发的iOS app 发布到App Store全流程
首次提交关于App Store上架步骤流程:兼容检查 -> 账号申请 -> 证书申请 -> 发布准备 -> App Store上架 -> 审核后续提交审核iOS审核团队联系方式;
|
1月前
|
安全 数据安全/隐私保护 iOS开发
【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固 摘要
随着智能手机的普及,越来越多的用户使用iOS设备来处理日常任务,因此iOS应用程序的安全性变得越来越重要。为了防止应用程序被攻击或破解,开发人员需要采用一些保护措施来加固应用程序。本文将介绍一种使用ipaguard混淆加固的方法来保护iOS应用的安全。
|
1月前
|
Linux Android开发 iOS开发
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
47 0
|
1月前
|
iOS开发 开发者
iOS开发:如何进行App备案并查看SHA-1值?
在移动应用程序的开发和发布过程中,进行App备案是确保应用符合相关法规的重要一步。SHA-1值是应用与第三方服务进行集成时必须提供的信息。本教程将详细介绍如何进行App备案,并查看iOS应用的SHA-1值。
|
2月前
|
开发工具 Android开发 iOS开发
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
使用vs2019学习xamarin时,创建新程序。使用模拟器真机等测试都报错如下图错误: ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231030-de8ce5fd.png?x-cos-security-token=r4KyZDEowPT0kGTL0LqE8EnwfN1Nzexadb05dcffed3939ff8d7591c528c01706nvpGSE93QwHpZM8NwhJNTZctNRQa0l3KDhEnqj8P7d8t
23 0
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
|
2月前
|
存储 安全 数据安全/隐私保护
iOS开发之打包上传到App Store——(一)各种证书的理解
iOS开发之打包上传到App Store——(一)各种证书的理解
相关产品
云迁移中心
推荐文章
更多