设计模式(7)-建造模式(Build)
2012-09-25 10:17
267 查看
【更新】
2013-01-12,补充实例剖析。
【描述】建造模式定义了处理其他对象的复杂构建的对象设计。
【UML图】
图1
1 BuildClient类提供了setBuilder()方法,设置一个建造者;
2 Builder类提供了一组方法接口,BuildA()、BuildB()、BuildC();
3 BuildClient类提供了build()方法,调用Builder对象的一组方法。
【示例代码】
builder.h
builder.cpp
xmlbuilder.h
xmlbuilder.cpp
textbuilder.h
textbuilder.cpp
buildclient.h
buildclient.cpp
main.cpp
【运行结果】
【对比】建造模式和策略模式
设计模式(3)-策略模式(Strategy)一文中,示例代码UML图,如图2所示:
图2
对比策略模式的UML图,不难发现策略模式与建造模式极为相似。他们之间有何区别呢?
区别:策略模式提供的是一个方法,而建造模式提供的是一组方法。
对于建造模式和策略模式的区别,有不同看法,欢迎提出宝贵意见,共同学习!
【实例剖析】
早一阵子在CSDN上传了几个加密算法的资源:
AES加解密算法
DES加解密算法
现在的问题是如何做到算法的灵活切换?一开始,我想到的方法利用策略模式,但进行的并不顺利。原因是:算法复杂度较高,步骤繁多,打包的接口难于统一。后来想到了建造模式。在上述两种算法的基础上,还引入了另一种算法。其UML图如图所示:
图3
现在的做法可概括如下:
1 界面类只负责接收参数;
2 通过WizardPage实现导航,导航完成,触发建造(Build);
3 以加密建造为例:
(1) 建立一个EncryBuild抽象接口;
(2) 实现了3个具象加密类;
(3) EncryWizardPage作为Client,负责选择Builder。
加解密软件实现效果如下:
图4
源码不方便公开,只介绍方法,见谅!
【源码下载】
Qt设计模式1-8测试源码:http://download.csdn.net/detail/tandesir/4984275
声明:该源码仅供学习交流,勿用于商业目的。
转载请标明出处,仅供学习交流,勿用于商业目的
Copyright @ http://blog.csdn.net/tandesir
2013-01-12,补充实例剖析。
【描述】建造模式定义了处理其他对象的复杂构建的对象设计。
【UML图】
图1
1 BuildClient类提供了setBuilder()方法,设置一个建造者;
2 Builder类提供了一组方法接口,BuildA()、BuildB()、BuildC();
3 BuildClient类提供了build()方法,调用Builder对象的一组方法。
【示例代码】
builder.h
#ifndef BUILDER_H #define BUILDER_H class Builder { public: Builder(); public: virtual void BuildA(); virtual void BuildB(); virtual void BuildC(); }; #endif // BUILDER_H
builder.cpp
#include <QDebug> #include "builder.h" Builder::Builder() { qDebug()<<"construct Builder"; } void Builder::BuildA() { } void Builder::BuildB() { } void Builder::BuildC() { }
xmlbuilder.h
#ifndef XMLBUILDER_H #define XMLBUILDER_H #include "builder.h" class XMLBuilder : public Builder { public: XMLBuilder(); public: void BuildA(); void BuildB(); void BuildC(); }; #endif // XMLBUILDER_H
xmlbuilder.cpp
#include <QDebug> #include "xmlbuilder.h" XMLBuilder::XMLBuilder() { qDebug()<<"construct XMLBuilder"; } void XMLBuilder::BuildA() { qDebug()<<"XMLBuilder BuildA"; } void XMLBuilder::BuildB() { qDebug()<<"XMLBuilder BuildB"; } void XMLBuilder::BuildC() { qDebug()<<"XMLBuilder BuildC"; }
textbuilder.h
#ifndef TEXTBUILDER_H #define TEXTBUILDER_H #include "builder.h" class TextBuilder : public Builder { public: TextBuilder(); public: void BuildA(); void BuildB(); void BuildC(); }; #endif // TEXTBUILDER_H
textbuilder.cpp
#include <QDebug> #include "textbuilder.h" TextBuilder::TextBuilder() { qDebug()<<"construct TextBuilder"; } void TextBuilder::BuildA() { qDebug()<<"TextBuilder BuildA"; } void TextBuilder::BuildB() { qDebug()<<"TextBuilder BuildB"; } void TextBuilder::BuildC() { qDebug()<<"TextBuilder BuildC"; }
buildclient.h
#ifndef BUILDCLIENT_H #define BUILDCLIENT_H #include "builder.h" class BuildClient { public: BuildClient(); private: Builder *builder; public: void setBuilder(Builder *builder); void build(); }; #endif // BUILDCLIENT_H
buildclient.cpp
#include <QDebug> #include "buildclient.h" BuildClient::BuildClient() { } void BuildClient::setBuilder(Builder *builder) { this->builder = builder; } void BuildClient::build() { builder->BuildA(); builder->BuildB(); builder->BuildC(); }
main.cpp
#include <QDebug> #include "buildclient.h" #include "xmlbuilder.h" #include "textbuilder.h" int main(int argc, char **argv) { BuildClient client; client.setBuilder(new XMLBuilder); client.build(); return 0; }
【运行结果】
construct Builder construct XMLBuilder XMLBuilder BuildA XMLBuilder BuildB XMLBuilder BuildC
【对比】建造模式和策略模式
设计模式(3)-策略模式(Strategy)一文中,示例代码UML图,如图2所示:
图2
对比策略模式的UML图,不难发现策略模式与建造模式极为相似。他们之间有何区别呢?
区别:策略模式提供的是一个方法,而建造模式提供的是一组方法。
对于建造模式和策略模式的区别,有不同看法,欢迎提出宝贵意见,共同学习!
【实例剖析】
早一阵子在CSDN上传了几个加密算法的资源:
AES加解密算法
DES加解密算法
现在的问题是如何做到算法的灵活切换?一开始,我想到的方法利用策略模式,但进行的并不顺利。原因是:算法复杂度较高,步骤繁多,打包的接口难于统一。后来想到了建造模式。在上述两种算法的基础上,还引入了另一种算法。其UML图如图所示:
图3
现在的做法可概括如下:
1 界面类只负责接收参数;
2 通过WizardPage实现导航,导航完成,触发建造(Build);
3 以加密建造为例:
(1) 建立一个EncryBuild抽象接口;
(2) 实现了3个具象加密类;
(3) EncryWizardPage作为Client,负责选择Builder。
加解密软件实现效果如下:
图4
源码不方便公开,只介绍方法,见谅!
【源码下载】
Qt设计模式1-8测试源码:http://download.csdn.net/detail/tandesir/4984275
声明:该源码仅供学习交流,勿用于商业目的。
转载请标明出处,仅供学习交流,勿用于商业目的
Copyright @ http://blog.csdn.net/tandesir
相关文章推荐
- 设计模式--创建模式--建造模式--java
- JAVA设计模式 Build 模式
- 设计模式之2 - 建造模式Builder
- 建造灵活与可维护的J2EETM 应用程序的设计模式
- builder设计模式(建造模式)
- 设计模式之四 --- 建造(Builder)模式
- 设计模式二:建造模式
- 一日一设计模式之C++篇(Build模式)
- java设计模式(5):建造模式(Builder)
- 设计模式之Build(生成者模式)
- 设计模式之——建造模式
- 设计模式-建造模式
- 设计模式学习---第十一节:建造模式
- 设计模式之十三 建造者模式(建造小人)
- 建造设计模式
- 深入浅出设计模式之建造模式
- Java设计模式——建造模式(Builder Pattern)
- 设计模式学习笔记(Build模式)
- c++设计模式之建造模式
- Java设计模式 —— 建造模式 (Builder)