创建者模式
来源:互联网 发布:蜂群算法和蚁群算法 编辑:程序博客网 时间:2024/05/19 05:34
建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示:
《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构
对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。
代码示例:
// 建造者模式2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;class Men{public:void SetBody(int param){m_nBody = param;}void SetEye(int param){m_nEye = param;}void SetFoot(int param){m_nFoot = param;}void show(){printf("body:%d\neye:%d\nfoot:%d\n",m_nBody,m_nEye,m_nFoot);}private:int m_nBody;int m_nEye;int m_nFoot;};class BaseBuilder{public:virtual void CreateMen() = 0;virtual void BuildBody(int param) = 0;virtual void BuildEye(int param) = 0;virtual void BuildFoot(int param) = 0;virtual Men* GetMen() = 0;};class FatBuilder : public BaseBuilder{public:void CreateMen() {printf("create a fatter!!\n");m_men = new Men();}void BuildBody(int param){m_men->SetBody(param);}void BuildEye(int param){m_men->SetEye(param);}void BuildFoot(int param){m_men->SetFoot(param);}Men* GetMen() {return m_men;}protected:private:Men * m_men;};class ThinBuilder : public BaseBuilder{public:void CreateMen() {printf("create a thiner!!\n");m_men = new Men();}void BuildBody(int param){m_men->SetBody(param);}void BuildEye(int param){m_men->SetEye(param);}void BuildFoot(int param){m_men->SetFoot(param);}Men* GetMen() {return m_men;}protected:private:Men * m_men;};class Director{public:Director(BaseBuilder* base){m_baseBuilder = base;}void BuilderMen(){m_baseBuilder->CreateMen();m_baseBuilder->BuildBody(501);m_baseBuilder->BuildEye(502);m_baseBuilder->BuildFoot(503);}public:BaseBuilder* m_baseBuilder;};int main(int argc, char* argv[]){// Men* men2 = new Men();// men2->SetBody(100);// men2->SetEye(200);// men2->SetFoot(300);// men2->show();Director* director = NULL;BaseBuilder* base = NULL;Men* men = NULL;base = new FatBuilder();director = new Director(base);director->BuilderMen();men = base->GetMen();men->show();printf("Hello World!\n");base = new ThinBuilder();director = new Director(base);director->BuilderMen();men = base->GetMen();men->show();printf("Hello World!\n");return 0;}结果:
create a fatter!!
body:501
eye:502
foot:503
Hello World!
create a thiner!!
body:501
eye:502
foot:503
Hello World!
Press any key to continue
1 0
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- 创建者模式
- Builder模式(创建者模式)
- 原型模式 - 创建者模式
- 设计模式--创建者模式
- 设计模式-创建者模式
- 创建者模式详解
- 创建者模式(Builder)
- easyui对话框注意的地方
- Leap Motion自带Sample之详解_Win/C++版本
- 常用maven jar 依赖
- 自定义控件
- 正则化方法:L1和L2 regularization、数据集扩增、dropout
- 创建者模式
- 利用注解,自动生成建表语句&转换查询结果
- 在同一台机器上安装多个版本jdk,修改环境变量不生效
- 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
- [user@kafka.apache.org]Errors after reboot on single node setup
- 文件和注册表的重定向解决方法
- 你不知道的JavaScript--Item28 垃圾回收机制与内存管理
- 关于Markdown的使用
- java项目分层思想