`
kmplayer
  • 浏览: 508703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之构建器模式

阅读更多
1,目标:将对象的创建和它的表示法分开.
2,实例代码:
#include <iostream>
#include <cassert>
#include <vector>
using namespace std;

class Part
{
public:
    //其一个下标的作用
    enum BPart{ WHEEL,MOUNTAIN,RACE,PNUM };//这里NUM的使用,计数
private:
    BPart id;
    static string partName[PNUM];
public:
    Part(BPart bp):id(bp){}
    friend ostream& operator<<(ostream& os,const Part& bp)
    {
        return os<<partName[bp.id];
    }
};
string Part::partName[PNUM]={ "wheel","mountain","race" };

class Bicycle //相当于Part的向导器
{
    vector<Part*> parts;
public:
    ~Bicycle()
    {
        for( vector<Part*>::iterator ite=parts.begin();ite!=parts.end();ite++ )
            delete *ite;
    }
    void addPart(Part* bp){ parts.push_back(bp); } //自行车添加构件
    friend ostream& operator<<(ostream& os,Bicycle& b)
    {
        os<<"Parts:{ ";
        for(vector<Part*>::iterator ite=b.parts.begin();ite!=b.parts.end();ite++ )
            os<<*(*ite)<<" ";
        return os<<"}";
    }
};

class BicycleBuilder
{
protected:
    Bicycle* product;
public:
    BicycleBuilder(){ product=0; }
    //关键
    void createProduct(){ product=new Bicycle; }
    virtual void buildWheel()=0;
    virtual void buildMountain()=0;
    virtual void buildRace()=0;
    virtual string getBikeName()=0;
    Bicycle* getProduct()
    {
        Bicycle* temp=product;
        product=0;//这里的使用*****
        return temp;
    }
};

class MountainBuilder : public BicycleBuilder
{
public:
    //不同类型的自行车,行为不同
    void buildWheel(){ product->addPart( new Part(Part::WHEEL) ); }
    void buildMountain(){ product->addPart( new Part(Part::MOUNTAIN) ); }
    void buildRace(){};
    string getBikeName(){ return "MountainBike"; }
};

class RaceBuilder : public BicycleBuilder
{
public:
    void buildWheel(){ product->addPart( new Part(Part::WHEEL) ); }
    void buildMountain(){}
    void buildRace(){ product->addPart( new Part(Part::RACE) ); };
    string getBikeName(){ return "RaceBike"; }
};

class BuilderTech//Builder的向导器
{
    BicycleBuilder* builder;
public:
    BuilderTech(){ builder=0; }
    void setBuilder(BicycleBuilder* b){ builder=b; }
    void construct()
    {
        assert(builder);
        builder->createProduct();//这里****
        builder->buildWheel();
        builder->buildMountain();
        builder->buildRace();
        cout<<"Build bike:"<<builder->getBikeName()<<endl;
    }
};

int main()
{
    BicycleBuilder* builder;
    BuilderTech t;

    builder=new MountainBuilder;
    t.setBuilder(builder);
    t.construct();
    cout<<*(builder->getProduct())<<endl;

    builder=new RaceBuilder;
    t.setBuilder(builder);
    t.construct();
    cout<<*(builder->getProduct())<<endl;

    return 0;
}


核心:部件组合成为一个完整产品的算法和部件本身分开了.
分享到:
评论

相关推荐

    设计模式之构建模式Java实现和类设计图

    构建模式(Builder Pattern)是设计模式中的一种结构型模式,主要解决复杂对象的创建问题,通过将构造过程逐步分解,使得构造过程与表示分离,从而能够独立地改变它们。这种模式在Java中广泛应用,尤其在需要创建...

    基于设计模式构建数据访问中间件

    ### 基于设计模式构建数据访问中间件 #### 一、引言 随着软件系统的日益复杂化,中间件技术成为提升开发效率、降低维护成本的关键手段之一。尤其是在处理数据访问方面,有效的中间件能够极大地简化开发流程,提高...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    构建者模式、回调和观察者设计模式

    构建者模式、回调和观察者设计模式是软件开发中常用的设计模式,它们分别在不同的场景下发挥着重要的作用。下面将详细介绍这三个设计模式,并通过一个简单的例子来展示它们的应用。 首先,构建者模式(Builder ...

    使用设计模式构建通用数据库访问类.

    本文将围绕“使用设计模式构建通用数据库访问类”这一主题,深入探讨如何通过抽象基类与继承机制,结合具体的设计模式,如工厂模式和策略模式,来创建一个灵活且高效的数据库访问层。 ### 设计模式的重要性 设计...

    python设计模式第2版.pdf

    设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...

    Head First 设计模式 +Java设计模式(第2版)

    这本书通过丰富的图像、故事和幽默的方式,引导读者了解23种经典的GoF(Gang of Four)设计模式,包括单例模式、工厂模式、观察者模式、装饰器模式、适配器模式、代理模式等。书中强调了如何在实际项目中选择和应用...

    GOF设计模式中英文+设计模式精解中英文

    GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位专家在他们的著作《设计模式:可复用面向对象软件的基础》中提出,被誉为设计模式的经典之作。本资源包含了GOF设计...

    策略设计模式_构建公共通用的Dao

    标题中的“策略设计模式_构建公共通用的Dao”指出,我们即将探讨的是如何利用策略设计模式来构建一个可复用的、通用的数据访问对象(DAO)层。在软件开发中,DAO层通常负责与数据库进行交互,执行增删改查等操作。...

    java模式,设计模式,多种设计模式

    2. **基础性**:有些J2EE设计模式实际上是建立在某些软件开发设计模式之上的。 3. **影响性**:软件开发设计模式为J2EE设计模式提供了坚实的基础,其应用将直接影响整个结构的稳定性和可扩展性。 #### 五、设计模式...

    23种设计模式(C++).pdf

    《设计模式精解-GoF 23 种设计模式解析附 C++实现源码》是一本深入探讨软件设计模式的书籍,它涵盖了创建型、结构型和行为型三种主要类型的23个经典设计模式,并提供了C++语言的实现代码。设计模式是软件工程中的...

    设计模式之禅 设计模式

    这些设计模式都是《设计模式之禅》中探讨的核心内容,它们提供了良好的编程思维,有助于编写出高质量、易于维护的代码。通过对这些模式的学习和应用,开发者可以更好地理解和解决软件开发中的各种挑战,提升软件工程...

    您的设计模式.pdf。

    涵盖了策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式、装饰模式、迭代器模式等十四种常用的设计模式。 策略模式...

    深入浅出设计模式(中文版)

    结构型模式处理对象组合和继承关系,如适配器模式、装饰器模式和代理模式等,这些模式可以帮助我们构建更复杂、可扩展的系统。行为型模式关注对象之间的交互和责任分配,如策略模式、观察者模式和模板方法模式等,...

    C#面向对象设计模式纵横谈 12种设计模式

    本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...

    重学java的设计模式

    在软件开发领域,设计模式是经验丰富的开发者们总结出的解决常见问题的最佳实践。Java作为一门广泛应用的开发语言,其设计模式的应用对于提高代码质量、可维护性和可扩展性至关重要。本文将着重探讨创建型模式、结构...

Global site tag (gtag.js) - Google Analytics