《TypeScript图形渲染实战:2D架构设计与实现》 —2.3.2 Doom3Factory工厂类
2.3.2 Doom3Factory工厂类
下面来模拟微软COM中的方式,不过笔者更喜欢使用静态方法而不是全局方法,因此增加一个名为Doom3Factory的类,用于创建IDoom3Tokenizer接口。具体代码如下:
// 该工厂需要被调用方使用,因此export导出
export class Doom3Factory
{
// 注意返回的是IDoom3Tokenizer接口,而不是Doom3Tokenizer实现类
public static createDoom3Tokenizer ( ) : IDoom3Tokenizer {
let ret : IDoom3Tokenizer = new Doom3Tokenizer ( ) ;
return ret;
}
}
可以看到,createDoom3Tokenizer使用了static关键字,说明该方法是静态方法,在调用该方法时不需要使用new Doom3Factory方法,可以用类名来直接调用静态方法:Doom3Factory. createDoom3Tokenizer。需要注意的一点是,在接口中不能声明静态方法或属性。
另外还需要注意的是,在面向对象的语言中(C++、C#、Java等)对于向下转型都需要使用明确的转换操作符,但是向上转型却不需要。例如上面let ret : IDoom3Tokenizer = new Doom3Tokenizer ( ) ; 这句代码,自动将Doom3Tokenizer类转型为IDoom3Tokenizer接口。
接着在IDoom3Tokenizer接口中增加一个创建IDoom3Token的接口方法并在Doom3Tokenizer中实现该方法。具体代码如下:
export interface IDoom3Tokenizer {
//新增一个创建子接口的方法
createIDoom3Token ( ) : IDoom3Token;
setSource ( source : string ) : void ;
reset () : void ;
getNextToken ( token : IDoom3Token) : boolean ;
}
// 实现新增的接口方法
class Doom3Tokenizer implements IDoom3Tokenizer {
//创建IDoom3Token接口
public createIDoom3Token ( ) : IDoom3Token {
return new Doom3Token ( ) ;
}
}
关于上述使用模式,会在后面的代码中经常用到,因此特别说明一下。
- 点赞
- 收藏
- 关注作者
评论(0)