- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种基于泛型的建造者模式实现方法.doc
一种基于泛型的建造者模式实现方法
摘 要:本文阐述了设计模式的定义及基本要素,分析了建造者模式的结构、动机与目的,对比基于继承与虚函数的实现,提出了一种基于泛型的实现方法及代码。最后讨论了该实现方法的优缺点。
关键词:设计模式; 泛型; 静多态; 动多态; 建造者模式; 模板
1 引言
设计模式是对于某一类的软件设计问题的可重用的解决方案。[1]在软件开发中,其主要作用为:重用设计、共用词汇、方便交流、易于重构。一个模式有四个基本要素:1)模式名称,用于描述模式的问题、解决方案和效果;2)问题 用于解释设计问题和问题存在的前因后果;3)解决方案 描述设计的组成部分、相互关系及其各种的职责和协作方式;4)效果 描述模式应用的效果和使用模式应权衡的问题。[2]设计模式主要分为创建型、结构型、行为型,建造者模式是结构型模式之一,其意图是“将抽象化与实现脱耦,使得二者可以独立变化”。
在面向对象程序设计中,封装变化最主要的技术是多态。多态是同一实体同时具有多种形式,即同一操作作用于不同的对象,产生不同的执行结果。多态分为动多态、静多态。动多态是通过继承和虚函数来实现的,在运行期间,虚函数调用不同子类型的虚成员函数以实现不同的功能。静多态是通过泛型中模板实现的,在编译期间,接口绑定不同的功能代码。
当前,设计模式的实现技术是使用动多态,即继承与虚函数(接口与实现)。其主要的问题是,接口必须在公共基类中预先设定,动多态的绑定是入侵性的或者插入式的。针对这一问题,本文以建造者模式为例,使用静多态给出非入侵性或非插入式的实现。
2 建造者模式
建造者模式是对象的创建型模式,其动机是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。此方法不够灵活,继承机制将抽象部分与实现部分固定在一起,难以对抽象部分和实现部分独立进行修改、扩充和重用。为解决上述问题,可使用建造者模式。
建造者模式结构图如图1,[3]其参与者分别为:Builder为创建一个Product对象的各个部件指定抽象接口;ConcreteBuilder实现Builder的接口以构造和装配该产品的各个部件;Director构造一个使用Builder接口的对象;Product表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义其装配过程,包含定义组成部件的类及其最终产品的接口。对象协作中,客户创建Director对象,并对Builder对象进行配置。
3 泛型与模板
泛型是现代程序设计语言的一种特性。泛型是一种特殊的类型,其将指定类型的工作延迟到客户端代码声明并实例化类或方法的时候,泛型将类型参数化以达到代码复用的目的,从而提高软件开发工作效率。
不同的语言支持的泛型的特性不同。.NET泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作其所存储的对象的类型的占位符;类型参数作为其字段的类型及其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。?Java 泛型的参数只代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。Java?编译器在编译泛型时会自动加入类型转换的编码,因此其运行速度不会因为使用泛型而加快。[4]在C++ 中,泛型即模板,其无法对泛型的类型参数进行约束,在编译时,每个使用的封闭泛型类型都有独立的编码产生,编译器确保其类型安全性。[5]C++模板有两种类型,函数模板与类模板。下面以C++模板为例,给出建造者模式的实现方法。
4 泛型实现建造者模式
基于泛型的静多态为实现设计模式提供了新方法。静多态的实现类型在编译期中确定,从而可以避免使用指针,其具备更好的类型安全性,更高的效率。下面是其实现结构图。
图2 基于泛型的建造者模式结构图
Class Product {
Public:
Void Product const;
}
Class ConcreteBuilder{
Public:
Void BuildPart() const;
Void GetResult() const;
}
Template
Class Builder{
Private:
T const concreteBuilder;
Public:
Void BuildPart() ;
}
Template
Void Builder::BuildPart(
文档评论(0)