首页 > 其他分享 >设计模式-建造者模式

设计模式-建造者模式

时间:2023-02-07 12:55:28浏览次数:45  
标签:builder phone Builder 建造 xiaomi 模式 Phone 设计模式 void

建造者 模式

builderModle.h

#pragma once

#include <iostream>
#include <string>
using namespace std;
class Phone {
public:
	Phone() {}
	~Phone() {}
	void setBattery(string batteryName) { cout << batteryName << endl; this->m_batteryName = batteryName; }
	void setScreen(string screenName) { cout << screenName << endl; this->m_screenName = screenName; }
	void setCamera(string cameraName) { cout << cameraName << endl; this->m_cameraName = cameraName; }
	void displayPhone() {
		cout << "battery:" << this->m_batteryName;
		cout << "screen:" << this->m_screenName;
		cout << "camera:" << this->m_cameraName;
	}
private:
	string m_batteryName;
	string m_screenName;
	string m_cameraName;

};
class Builder {
public:
	Builder() {}
	~Builder() {}
	//Builder(string EngerneerName){ }
	virtual void produceBattery() = 0;
	virtual void produceScreen() = 0;
	virtual void produceCamera() = 0;
	virtual Phone* getPhone() { return phone1; }
protected:
	Phone *phone1 = NULL;
};
class xiaomiBuilder : public Builder
{
public:
	xiaomiBuilder() { phone = new Phone; }
	void produceBattery() { phone->setBattery("xiaomi Battery"); }
	void produceScreen() { phone->setScreen("xiaomi Screen"); }
	void produceCamera() { phone->setCamera("xiaomi Camera"); }
	Phone* getPhone() { return phone; }
private:
	Phone *phone;
};
class Director {
public:
	Director() { }
	Director(Builder *builder) :m_builder(builder) { }
	void create(Builder *builder) {
		Builder * test = builder;
		test->produceBattery();
		test->produceCamera();
		test->produceScreen();
	}
	void create() {
		this->m_builder->produceBattery();
		this->m_builder->produceCamera();
		this->m_builder->produceScreen();
	}
	/*Director(const Director& director){
		builder = director.builder;
	}*/
private:
	Builder *m_builder = NULL;
};

主函数

main.cpp

#pragma once
#include <iostream>
#include "builderModle.h"
using namespace std;

//设计模式
int main() {
	//建造者模式
	Builder *xiaomiEngerneer = new xiaomiBuilder();
	Director *director = new Director(xiaomiEngerneer);
	//director->getbuilder(xiaomiEngerneer);
	director->create(xiaomiEngerneer);
	Phone *m_phone = xiaomiEngerneer->getPhone();
	m_phone->displayPhone();

	cout << "hello" << endl;
	return 0;
}

输出

xiaomi Battery
xiaomi Camera
xiaomi Screen
battery:xiaomi Batteryscreen:xiaomi Screencamera:xiaomi Camerahello

注意

1.注意类的相互包含
2.注意类声明和展开的顺序

标签:builder,phone,Builder,建造,xiaomi,模式,Phone,设计模式,void
From: https://www.cnblogs.com/bell123/p/17098020.html

相关文章

  • 设计模式-单例模式
    简易单例模型easysiglemodle.h#ifndefEASYSIGLEMODLE_H#defineEASYSIGLEMODLE_H#include<iostream>usingnamespacestd;classEasySingleModle{public:......
  • 设计模式-工厂模式/抽象工厂模式
    工厂模式#include<iostream>#include<string>usingnamespacestd;classShape{public: virtualvoiddraw()=0;};classRectangle:publicShape{pub......
  • 【Appium_python】启动app,出现多次打开关闭导致失败问题,driver用单例模式(_new_)进行解
    运用多设备,启动app多次出现打开又关闭问题,查看后是多次对driver进行实例化,就用单例的模式进行解决。单例模式(SingletonPattern)目的就是保证一个类仅有一个实例,每一次执行......
  • 工厂模式-go语言实现
    一、理论知识工厂模式的作用就是用来创建对象,细分为三种:简单工厂、工厂方法、抽象工厂。1.1应用场景工厂模式一般用于对于不同的场景,需要创建不同的对象,但是这些对象实......
  • 单例模式
      一个类永远只能创建一个对象,例如任务管理器我们只要一个就可以解决问题了,这样可以节省内存空间。单例的实现方式很多:比如饿汉单例模式和懒汉单例模式....................
  • 搞懂设计模式——代理模式 + 原理分析
    作者:京东零售秦浩然引子举个栗子,众所周知,我们是可以在京东上购买机票的。但机票是航司提供的,我们本质上是代理销售而已。那为什么航司要让我们代理销售呢?我们又是如帮他做......
  • java合成模式之神奇的树结构
    目录什么是合成模式安全式合成模式抽象构件(Component)角色树叶构件(Leaf)角色树枝构件(Composite)角色使用透明式合成模式抽象构件(Component)角色树叶构件(......
  • 模板模式
    /*模板模式:解决某类事情的步骤有些是固定的,有些是会发生变化的,那么这时候我们可以为这类事情提供一个模板代码,从而提高效率。需求;编写一个计算程序运行时间的模板。模板......
  • 理解vuex -- vue的状态管理模式
    [b]vuex是什么?[/b]先引用vuex官网的话:[quote]Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以......
  • 设计模式-策略模式升级(服务定位器模式)
    设计模式-策略模式(服务定位器模式)前言:正文开始前先抛出一个问题,项目开发中如果让你设计支付模块,目前有支付宝、微信、各大银行的部分,你会如何设计支付这块的代码?在调用的......