注:图片来源于 https://www.cnblogs.com/-saligia-/p/10216752.html

建造模式UML图解析:

代码:

Director.h

//
// Created by DELL on 2019/10/15.
// #ifndef BUILDER_DIRECTOR_H
#define BUILDER_DIRECTOR_H #include "Builder.h"
class Director {
public:
explicit Director(PhoneBuilder* pb) {
builder = pb;
}
void BuildPlan() {
builder->BuildOS();
builder->BuildShape();
builder->BuildMemory();
builder->ShowDetail();
}
private:
PhoneBuilder* builder;
}; #endif //BUILDER_DIRECTOR_H

Builder.h

//
// Created by DELL on 2019/10/15.
// #ifndef BUILDER_BUILDER_H
#define BUILDER_BUILDER_H #include "Product.h"
class PhoneBuilder {
public:
virtual void BuildOS() = ;
virtual void BuildShape() = ;
virtual void BuildMemory() = ;
virtual void ShowDetail() = ;
}; class HUAWEIBuilder : public PhoneBuilder {
public:
HUAWEIBuilder() {
phone = new Phone();
}
void BuildOS() override {
phone->SetOS("HMOS");
}
void BuildShape() override {
phone->SetShape("6.2inch");
}
void BuildMemory() override {
phone->SetMemory("8G");
}
void ShowDetail() override {
phone->showDetail();
}
private:
Phone* phone;
}; class OPPOBuilder : public PhoneBuilder {
public:
OPPOBuilder() {
phone = new Phone();
}
void BuildOS() override {
phone->SetOS("ColorOS");
}
void BuildShape() override {
phone->SetShape("6.5inch");
}
void BuildMemory() override {
phone->SetMemory("6G");
}
void ShowDetail() override {
phone->showDetail();
}
private:
Phone* phone;
};
#endif //BUILDER_BUILDER_H

Product.h

//
// Created by DELL on 2019/10/15.
// #ifndef BUILDER_PRODUCT_H
#define BUILDER_PRODUCT_H #include <string>
#include <utility>
#include <iostream>
//产品类-手机
class Phone {
public:
Phone() : phone_os("Android"), phone_shape("5 inch"), phone_memory("4G"){}
//set成员函数用于设置private成员变量
void SetOS(std::string os) {
phone_os = std::move(os);
}
void SetShape(std::string shape) {
phone_shape = std::move(shape);
}
void SetMemory(std::string memory) {
phone_memory = std::move(memory);
}
void showDetail() {
std::cout << phone_os << " " << phone_shape << " " << phone_memory << std::endl;
} private:
std::string phone_os;
std::string phone_shape;
std::string phone_memory;
}; #endif //BUILDER_PRODUCT_H

用户 main.cpp

#include <iostream>
#include "Director.h"
#include "Builder.h"
using namespace std; int main() {
PhoneBuilder* hw = new HUAWEIBuilder();
auto* dr1 = new Director(hw);
dr1->BuildPlan(); PhoneBuilder* op = new OPPOBuilder();
auto* dr2 = new Director(op);
dr2->BuildPlan(); return ;
}

注:工厂模式与建造模式最大区别在于:工厂模式关注如何获取实例对象,而建造模式关注如何建造实例对象。

工厂模式直接产出产品,不关注细节,而建造模式关注的是产品的细节,关心如何构造产品的每个细节进而组合成完整产品。

以上是两种模式的区别。

3.建造模式(Builder)的更多相关文章

  1. 建造模式Builder

    建造模式Builder /** * 抽象建造者 */ public abstract class Builder { public abstract void buildPart1(); public ...

  2. 《JAVA设计模式》之建造模式(Builder)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation ...

  3. 【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern

    package com.tn.pattern; public class Client { public static void main(String[] args) { Director dire ...

  4. 浅谈设计模式--建造器模式(Builder Pattern)

    建造器模式,是于创建带有大量参数的对象,并避免因参数数量多而产生的一些问题(如状态不一致-JavaBean的setter模式). 如果参数多且有些是必须初始化的,有些是不一定需要初始化的时候,创建对象 ...

  5. 设计模式(5)--Builder(建造模式)--创建型

    1.模式定义: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品 ...

  6. Java建造(Builder)模式

    一.什么是建造模式: 建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同内部表象的产品.客户端不需要知道产品内部的结构和生产过程. 二.建造模式的结构: Buil ...

  7. 设计模式之——Builder建造模式

    Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式. 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目. Builder抽象类,为建造模式的核心 ...

  8. 23种设计模式--建造者模式-Builder Pattern

    一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...

  9. 六个创建模式之建造者模式(Builder Pattern)

    定义: 将一个复杂的对象的构建与它的表示分类,使得同样的构建过程可以创建不同的表示.建造者模式一步步地创建一个复杂对象,但用户仅需指定对象的类型和内容,不需要关心各个部分之间的关联关系. 结构图: B ...

随机推荐

  1. (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)

    目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...

  2. Asp.net MVC 权限验证,以及是否允许匿名访问

    public class CheckUserAttribute : ActionFilterAttribute, IAuthorizationFilter { public void OnAuthor ...

  3. Join Reorder优化 - 论文摘要

    Query Simplification: Graceful Degradation for Join-Order Optimization 这篇的related work可以参考,列的比较全面, Q ...

  4. php composer 报错 requires php ^7.1.8 || ^8.0 -> your php version

    php 环境变量版本低于7.1.8,更新php环境变量版本

  5. python 中requests的返回数可直接使用json

    对Python的request不是很了解,在使用时才发现,可以把request的请求结果,直接使用.json()['字段名']方法进行一个取值,案例如下 def test_tiantian(self) ...

  6. Python - Django - AJAX 实现 POST 请求

    index.html: <input type="text" id="i1">+ <input type="text" i ...

  7. [LeetCode] 203. Remove Linked List Elements 移除链表元素

    Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...

  8. [LeetCode] 773. Sliding Puzzle 滑动拼图

    On a 2x3 board, there are 5 tiles represented by the integers 1 through 5, and an empty square repre ...

  9. Java之使用IDE

    IDE是集成开发环境:Integrated Development Environment的缩写. 使用IDE的好处在于按,可以把编写代码.组织项目.编译.运行.调试等放到一个环境中运行,能极大地提高 ...

  10. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...