3.建造模式(Builder)
注:图片来源于 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)的更多相关文章
- 建造模式Builder
建造模式Builder /** * 抽象建造者 */ public abstract class Builder { public abstract void buildPart1(); public ...
- 《JAVA设计模式》之建造模式(Builder)
在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation ...
- 【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern
package com.tn.pattern; public class Client { public static void main(String[] args) { Director dire ...
- 浅谈设计模式--建造器模式(Builder Pattern)
建造器模式,是于创建带有大量参数的对象,并避免因参数数量多而产生的一些问题(如状态不一致-JavaBean的setter模式). 如果参数多且有些是必须初始化的,有些是不一定需要初始化的时候,创建对象 ...
- 设计模式(5)--Builder(建造模式)--创建型
1.模式定义: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品 ...
- Java建造(Builder)模式
一.什么是建造模式: 建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同内部表象的产品.客户端不需要知道产品内部的结构和生产过程. 二.建造模式的结构: Buil ...
- 设计模式之——Builder建造模式
Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式. 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目. Builder抽象类,为建造模式的核心 ...
- 23种设计模式--建造者模式-Builder Pattern
一.建造模式的介绍 建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...
- 六个创建模式之建造者模式(Builder Pattern)
定义: 将一个复杂的对象的构建与它的表示分类,使得同样的构建过程可以创建不同的表示.建造者模式一步步地创建一个复杂对象,但用户仅需指定对象的类型和内容,不需要关心各个部分之间的关联关系. 结构图: B ...
随机推荐
- 从0开始部署GPU集群-0:基本情况
配置信息(多台服务器) 1 硬件:CPU和GPU*可选 2 操作系统:centos7 3 驱动:nvidia显卡驱动 *可选 4 容器运行时:docker 和 nvidia container ru ...
- CTF SSTI(服务器模板注入)
目录 基础 一些姿势 1.config 2.self 3.[].() 3.url_for, g, request, namespace, lipsum, range, session, dict, g ...
- [Beta]第二次 Scrum Meeting
[Beta]第二次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/6 22:00 30min 大运村公寓6F楼道 附Github仓库:WEDO 例会照片 工作情况总 ...
- maven工程中MENIFEST.MF中属性作用
Manifest-Version: 版本号 Bundle-ManifestVersion: bundle的版本号 Bundle-Name: bundle的名称,主要是对bundle的作用的说明 Bun ...
- ASP.NET与非托管DLL的那些事儿【转+增】
https://www.cnblogs.com/yeahgis/archive/2011/11/12/2246341.html ASP.NET与非托管DLL的那些事儿 环境VS2010 语言:ISO ...
- java excel给单元格增加批注(包含SXSSF)
package javatest; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...
- Hive Authorization
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization https://www.cloudera.c ...
- ubuntu中cmake版本升级
在网上下载一个项目,编译提示版本太低 CMake Error at CMakeLists.txt: (cmake_minimum_required): CMake 编译方式安装(需要openssl) ...
- Xcode UI界面调试神器-injectionIII
App Store搜索injectionIII下载即可,免费的哟. 打开injectionIII,运行即可. - (BOOL)application:(UIApplication *)applicat ...
- [LeetCode] 229. Majority Element II 多数元素 II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. Note: The a ...