zoukankan      html  css  js  c++  java
  • [原创]设计模式建造者模式

    定义

    将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

    实用范围

    1    当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
    2    当构造过程必须允许被构造的对象有不同表示时。

    角色

    在这样的设计模式中,有以下几个角色:
    1    builder:为创建一个产品对象的各个部件指定抽象接口。
    2    ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
    3    Director:构造一个使用Builder接口的对象。
    4    Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
    C++实现:
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    //抽象建造者
    class Builder
    {
    public:
        virtual void BuildHead() = 0;
        virtual void BuildBody() = 0;
        virtual void BuildFoot() = 0;
    };
    //具体的建造者类
    class ManBuilder : public Builder
    {
    public:
        void BuildHead() { cout << "build man head" << endl; };
        void BuildBody() { cout << "build man body" << endl; };
        void BuildFoot() { cout << "build man foot" << endl; };
    };
    
    class WomanBuilder : public Builder
    {
    public:
        void BuildHead() { cout << "build woman head" << endl; };
        void BuildBody() { cout << "build woman body" << endl; };
        void BuildFoot() { cout << "build woman foot" << endl; };
    };
    
    //构造的指挥官
    class Director
    {
    public:
        void Create(Builder *pBuilder)
        {
            pBuilder->BuildHead();
            pBuilder->BuildBody();
            pBuilder->BuildFoot();
        }
    };

    客户端调用代码:

    #include "stdafx.h"
    #include "Builder.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        Builder *builder1 = new ManBuilder();
        Builder *builder2 = new WomanBuilder();
        Director *director = new Director();
        director->Create(builder1);
        director->Create(builder2);
    
        delete director;
        delete builder1, builder2;
    
        getchar();
        return 0;
    }

    这里指挥官可以build不同的对象了。

    转载请注明出处:http://qq78292959.cnblogs.com/

  • 相关阅读:
    现在连Linux都搞不懂,当初我要是这么学习操作系统就好了!
    一时技痒,撸了个动态线程池,源码放Github了
    Java线程池ThreadPoolExecutor使用和分析(一)
    canch----1.对缓存的思考
    1.java 内存数据库--H2数据库使用指南
    What’s the difference between persist, save, merge and update? Which one should you use?
    primary key's generator in JPA entity
    STM32F103驱动M24256 256k存储芯片进行读写
    【Proteus+51单片机学习笔记】-51/52系列单片机简介
    【STM32项目笔记】STM32CubeMX+Keil+Proteus联合实现LED闪烁
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2917005.html
Copyright © 2011-2022 走看看