面试题答案
一键面试模板方法模式主要角色
- 抽象类(Abstract Class):定义了一个模板方法,这个方法定义了算法的骨架,由一系列基本方法组成。同时声明并实现部分基本方法,也可以声明一些抽象的基本方法,让子类去实现。
- 具体子类(Concrete Class):实现抽象类中声明的抽象基本方法,从而完成算法中特定步骤的实现。
代码示例
#import <Foundation/Foundation.h>
// 1. 抽象类
@interface AbstractClass : NSObject
// 模板方法
- (void)templateMethod {
[self primitiveOperation1];
[self primitiveOperation2];
[self primitiveOperation3];
}
// 抽象基本方法
- (void)primitiveOperation1;
- (void)primitiveOperation2;
// 具体基本方法(子类可重写)
- (void)primitiveOperation3 {
NSLog(@"AbstractClass's primitiveOperation3");
}
@end
@implementation AbstractClass
- (void)primitiveOperation1 {
NSLog(@"AbstractClass's primitiveOperation1");
}
- (void)primitiveOperation2 {
NSLog(@"AbstractClass's primitiveOperation2");
}
@end
// 2. 具体子类
@interface ConcreteClass : AbstractClass
- (void)primitiveOperation1;
- (void)primitiveOperation2;
@end
@implementation ConcreteClass
- (void)primitiveOperation1 {
NSLog(@"ConcreteClass's primitiveOperation1");
}
- (void)primitiveOperation2 {
NSLog(@"ConcreteClass's primitiveOperation2");
}
@end
在上述代码中:
- AbstractClass:是抽象类,
templateMethod
是模板方法,定义了算法骨架。primitiveOperation1
和primitiveOperation2
是抽象基本方法,由子类实现。primitiveOperation3
有默认实现,子类也可重写。 - ConcreteClass:是具体子类,实现了
primitiveOperation1
和primitiveOperation2
,完成了算法特定步骤的实现。通过这种方式,模板方法模式将算法的整体结构和具体实现细节分离,使得代码更具可维护性和扩展性。