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,如需转载请自行联系原作者


相关文章
|
24天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
73 3
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
120 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
37 0
|
3月前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
42 2
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
85 2
|
3月前
|
API 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
iOS 开发高效率工具包:10 大必备工具
42 1
|
3月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
52 1
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
177 2
|
3月前
|
数据可视化 iOS开发
iOS 开发,什么是 Interface Builder(IB)?如何使用 IB 构建用户界面?
iOS 开发,什么是 Interface Builder(IB)?如何使用 IB 构建用户界面?
37 4
|
3月前
|
iOS开发
iOS开发解释 App 生命周期,包括各个阶段的调用顺序。
iOS开发解释 App 生命周期,包括各个阶段的调用顺序。
26 1