《TypeScript图形渲染实战:2D架构设计与实现》 —2.3 使用工厂模式和迭代器模式
2.3 使用工厂模式和迭代器模式
我们发现,当使用面向接口的编程方式时,可以将接口和实现进行分离,并且使用TypeScript的export关键字仅仅导出了IDoom3Token和IDoom3Tokenizer接口,但是没有导出Doom3Token和Doom3Tokenizer这两个实现类。
这样做的好处是隐藏实现细节,让调用方根本不需要了解具体是如何做的,只需调用接口就可以完成其需求。但是也带来了一个问题:由于没有导出实现类,调用方无法使用例如 new Doom3Tokenizer ( )的方式来初始化实现类,那么调用方该如何初始化接口呢?
2.3.1 微软COM中创建接口的方式
在回答这个问题前,我们来看一下微软的COM(Component Object Modal,组件对象模型)中是如何创建接口的。
以微软的DirectX 9为例,在DirectX 9 SDK包中提供了一个全局函数Direct3DCreate9,调用该全局函数后会获得IDirect3D9接口的指针,然后可以通过IDirect3D9指针的CreateDevice接口方法,创建IDirect3DDevice9接口指针,接着可以使用IDirect3DDevice9接口的CreateTexture和CreateRenderTarget等接口方法,创建用于渲染的各种资源。
其他的COM组件对象创建方式类似,它们的共同点都是精心安排各个接口的层次,通过全局工厂函数Direct3DCreate9创建最顶层的接口,然后将上级接口作为工厂,创建下一级接口(使用CreateXXX的方法)。
- 点赞
- 收藏
- 关注作者
评论(0)