模板模式的使用
视图和控制器以及app程序的加载,设计到生命周期的大概就是采用的这种模式
适用范围:某个业务具有固定的一套流程,但是允许有差异性的情况
以Person 每天的活动为列 醒来,睁开眼,洗漱,过完一天的生活,睡觉
发现必要的经历都是醒来,睁开眼,睡觉,洗漱但是每个人过完一天的生活却不一样,睡觉
那么有学生,有公务员,有老师,有农民,有要饭的,碰瓷的
class Person{
var aname:String = "我"
init(){
self.mustdosomthing()
}
private func mustdosomthing(){
wakeup()
zhenyan()
if(cleantest()){
print("\(aname)今天洗漱了的,真是个乖孩子")
}
else{
print("\(self.aname)都不刷牙你太恶心了")
}
livelife()
gosleep()
print("");
}
private func zhenyan(){
print("睁开眼");
}
private func gosleep(){
print("我睡觉了");
}
private func wakeup(){
print("醒来");
}
func cleantest()->Bool{
return true;
}
func livelife(){
}
}
var per = Person()
class student:Person{
override init(){
super.init()
}
override func livelife(){
print("\(aname)"+"当然是上一天学咯")
}
override func cleantest()->Bool{
return false;
}
}
var stu = student()
打印出来是这样的
醒来
睁开眼
人今天洗漱了的,真是个乖孩子
我睡觉了
醒来
睁开眼
学生都不刷牙你太恶心了
学生当然是上一天学咯
我睡觉了
采用这样的设计模式好处也体现了出来了,易于子类扩展,且不影响整个模板的整体流程和算法
关于模板模式在实际项目中如何使用你可以移驾查看在iOS上如何使用模板模式来用于统一管理自定义的异常处理.语言是oc版写的还包括aes+256轮转加密加密对部分字段加而非
https://gitee.com/cendainfo/ios-network.git