8.建造者模式

1.说明
请参阅本系列第一章节
2.建造者模式说明
构造者模式:将一个复杂的构建与它的表示分离,使得同样的构建过程,可以创建不同的表示。即生成具有不同内部表象的产品对象。在使用的时候,用户只需要知道构建的对象就行了,而不需要知道构建的细节。客户端通过调用指挥者的接口,来控制构建过程,使得能够隔离用户的构建过程
注意事项:指挥者的构建过程必须足够普遍,以此来构建不同的具体的对象。如果这些构建的对象的有相同的属性或行为,也可以在指挥者中构建公共的方法
好处:建造的代码与表示代码分离,耦合度更低,构建者隐藏了产品的组装,使得表示代码更关注实现,如需修改,只需要修改实现细节,不用修改创建流程
感觉和工厂模式,模板方法模式都比较类似:都是需要注意的是:
工厂是生产不同对象,而建造者模式是构建具有不同内部表示的对象,注重细节
如果仅仅是构建对象内部的部分参数不同,可以通过传入参数的方式来构建,而不是用派生的方式来添加
3.UML
这里写图片描述
4.代码
代码背景:不同品牌的电脑,组装流程是一样的,代码简单较少了电脑的组装过程

 //建造者模式基类:BuildComBase.h
 #ifndef __BUILDCOMBASE_H
#define __BUILDCOMBASE_H

#include <iostream>

class CBuildComBase
{
public:
    virtual void create_cpu() = 0;
    virtual void create_mem() = 0;
    virtual void create_mainboard() = 0;
    virtual void create_harddisk() = 0;
    virtual void create_others()
    {
        std::cout<<"windows system"<<std::endl;
        std::cout<<"mouth"<<std::endl;
        std::cout<<"power"<<std::endl;
    }
};

#endif

//thinkpad 创建流程 ThinkPad.h
 #ifndef __THINKPAD_H
#define __THINKPAD_H

#include "BuildComBase.h"

class CThinkPad:public CBuildComBase
{
public:
    virtual void create_cpu() 
    {
        std::cout<<"thinkpad cpu"<<std::endl;
    }
    virtual void create_mem() 
    {
        std::cout<<"thinkpad mem"<<std::endl;
    }
    virtual void create_mainboard() 
    {
        std::cout<<"thinkpad mainboard"<<std::endl;
    }
    virtual void create_harddisk()  
    {
        std::cout<<"thindpad harddisk"<<std::endl;
    }

};
#endif

//mac: Mac.h
#ifndef __MAC_H
#define __MAC_H

#include "BuildComBase.h"

class CMac:public CBuildComBase
{
public:
    virtual void create_cpu()
    {
        std::cout<<"mac CPU"<<std::endl;
    }
    virtual void create_mem() 
    {
        std::cout<<"mac mem"<<std::endl;
    }
    virtual void create_mainboard()
    {
        std::cout<<"mac mainboard"<<std::endl;
    }
    virtual void create_harddisk()  
    {
        std::cout<<"mac harddisk"<<std::endl;
    }
};

#endif

//指挥者Dector.h 
#ifndef __DECTOR_H
#define __DECTOR_H

#include "BuildComBase.h"

class CDector
{
public:
    void create_builder(CBuildComBase* build)
    {
         create_buil(build);
    }
private:
    void create_buil(CBuildComBase* build)
    {
        build->create_cpu();
        build->create_mem();
        build->create_mainboard();
        build->create_harddisk();
        build->create_others();
    }
};

#endif

//client:客户端通过指挥者即可创建,而不用关注内部的创建细节

#include <iostream>
#include "Dector.h"
#include "Mac.h"
#include "ThinkPad.h"
#include "BuildComBase.h"

int main(void)
{
    CBuildComBase* mac = new CMac;
    CBuildComBase* thinkpad = new CThinkPad;
    CDector* dector = new CDector();
    std::cout<<"begin create thindpad:"<<std::endl;
    dector->create_builder(thinkpad);
    std::cout<<"begin create mac:"<<std::endl;
    dector->create_builder(mac);
    std::cout<<"create end"<<std::endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值