做设计参考的网站抖音代运营协议

news/2025/9/22 15:36:26/文章来源:
做设计参考的网站,抖音代运营协议,好看的创意网站设计,wordpress商城主题付费设计模式 创建者模式 前言原来代码使用设计模式总结Builder模式在源码中的应用#xff1a;其他代码 前言 “对象创建”模式——绕开new 工厂模式 抽象工厂 原型模式 构建器 动机与背景 目前需要建造一个房子#xff0c;建造房子需要一系列特定的步骤#xff0c;但是房子的类… 设计模式 创建者模式 前言原来代码使用设计模式总结Builder模式在源码中的应用其他代码 前言 “对象创建”模式——绕开new 工厂模式 抽象工厂 原型模式 构建器 动机与背景 目前需要建造一个房子建造房子需要一系列特定的步骤但是房子的类型也有很多不同类型的房子对应的建造步骤也不尽相同。 用于分步骤构建对象 没有使用设计模式的代码 // 可以参照模板方法 存在的问题 个人感觉与模板方式很相似所以上面的代码使用了模板方法的代码 解决方法 使用构建器将复杂多变的对象的构建过程抽象出来 使用设计模式的代码 原来代码 Builder 模式主要用于“分步骤构建一个复杂的对象”。 在这其中“分步骤”是一个稳定的算法而复杂对象的各个部分则经常变化。 变化点在哪里封装哪里—— Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动。 其缺点在于难以应对“分步骤构建算法”的需求变动。在Builder模式中要注意不同语言中构造器内调用虚函数的差别C vs. C#) 。 //原来的代码 class House{protected:void init(){ //1.构建的流程是稳定的this - BuildPart1(); // 打地基for(int i 0 ; i 4 ; i ){this - BuildPart2();}bool flag this - BuildPart3();if(flag){this - BuildPart4(); }this - BuildPart5(); }virtual ~House(){}//代表建房子的门 窗户 等 2.构建的方法是变化的纯虚函数virtual void BuildPart1() 0;virtual void BuildPart2() 0;virtual void BuildPart3() 0;virtual void BuildPart4() 0;virtual void BuildPart5() 0;}在这里有个问题是能不能把init函数名替换成构造函数不能C构造函数是静态绑定 class StoneHosepublic House{protected: //实例化virtual void BuildPart1(){...............}virtual void BuildPart2(){...............}virtual void BuildPart3(){...............}virtual void BuildPart4(){...............}virtual void BuildPart5(){...............} }到这里已经完成了使用 int main() {//就是父类指针指向子类对象House * pHouse new StoneHose();pHouse -Init();}使用设计模式 //把上面的代码用设计模式 //如果对象比较复杂可以做如下拆分把House分成两个一个是定义方法可变的叫做HouseBuilder ,一个定义流程、逻辑的是把init放进去 class House{//........void Part1();void Part2();void Part3();}class HouseBuilder{public:House *GetResult() {return pHouse;} virtual ~HouseBuilder(){}protected://代表建房子的门 窗户 等 2.构建的方法是变化的纯虚函数virtual void BuildPart1() 0;virtual void BuildPart2() 0;virtual void BuildPart3() 0;virtual void BuildPart4() 0;virtual void BuildPart5() 0;};//塞一个 HouseBulider指针,把 this 换成pHouseBuilder class HouseDirector{public:HouseBulider *pHouseBuilder;//另外要加入构造函数HouseDirector(HouseBulider *pH){ //新加入this - pHouseBuilder pH;}HouseBulider Construct(){//void init() 构建过程,不是虚函数pHouseBuilder - BuildPart1(); // 打地基for(int i 0 ; i 4 ; i ){pHouseBuilder - BuildPart2();//把init()中的 this 换成pHouseBuilder}bool flag pHouseBuilder - BuildPart3();if(flag){pHouseBuilder - BuildPart4(); }pHouseBuilder - BuildPart5(); return pHouseBuilder-GetResult();} }//那么石头房子呢 StoneHosepublic House 感觉这里是不需要呀 看这个https://zhuanlan.zhihu.com/p/665141864 class StoneHosepublic House{ //对象的表示}class StoneHoseBuilderpublic HouseBuilder{ // 实现protected: virtual void BuildPart1(){...............}virtual void BuildPart2(){...............}virtual void BuildPart3(){...............}virtual void BuildPart4(){...............}virtual void BuildPart5(){...............} }void main() {StoneHouseBuilder *pStoneHouseBuilder new StoneHouseBuilder;HouseDirector *pHouseDirector new HouseDirector(HouseBuilder *pStoneHouseBuilder);pHouseDirector-Construct();// 操作 }构建过程太复杂抽象出来单独变成类 把对象的表示和构建相分离House 和 HouseBuilder是的同样的构建(稳定)过程Construct可以构建不同的表示变化 上面只是一个演化模式 总结 总结一下就是把一个有构建步骤的对象拆分分成表示和实现方法过程实现过程稳定不抽象表示部分可以抽象用虚函数实现 class A{//需要创建的事物、对象这里定义A的组成 set_Part1(); } class B_builer (方法接口){ //A的组成实现接口要有能返回A的接口 //1.要拥有A指针成员 A *m_a //2.要拥有构造函数传入A实现多态 B_builer(A a){this-m_a a;} //3.要有返回A 的方法接口 A GetComputer() //4.要定义建造A需要的方法接口buildPart1 2 3 4 … A *m_a B_builer(A *a){this-m_a a;} virtual buildPart1() 0; virtual A* GetComputer() 0; // 要有返回A 的方法接口} class B_concrete_builer (方法实现)public B_builer{ virtual buildPart1(){ this - A-setPart1();} //具体实现 virtual A* GetComputer(){return tbis-A ;}; // 具体实现 要有返回A 的方法接口 } class C_Process 稳定的构建过程 { //1.要拥有建造材料的方法接口的指针成员 B_builer *m_b_builer B_builer *m_b_builer //2.要拥有构造函数传入B_builer实现多态 C_Process(B_builer *b_builer){this-m_b_builer b_builer;} //2稳定的构建过程代码建造逻辑 要返回A A *func(){ step 1 2 3 … return m_b_builer-GetResult(); } } 使用过程 B_concrete_builer *B new B_concrete_builer(); C_Process *C new C_Process(B); C-func() A B-GetComputer(); Builder模式在源码中的应用 StringBuilder 其实我们熟知的StringBuilder就是builder模式的典型实现。我们平时使用基本都是这样 1 StringBuilder sb new StringBuilder(); 2 sb.append(123).append(‘a’) 3 .append(1.23) 4 .append(true) 5 .append(“hhhh”); https://zhuanlan.zhihu.com/p/113971558 其他代码 这个很好 https://zhuanlan.zhihu.com/p/665141864 //下面是源码 #include iostream using namespace std;#include string//需要的产品笔记本电脑 class Computer { public:void SetCPU(const string cpu) {this-cpu cpu;}void SetDisk(const string disk) {this-disk disk;}void SetMemory(const string memory) {this-memory memory;}void SetScreen(const string screen) {this-screen screen;}void ShowInfo() {cout 基本信息 endl;cout this-cpu endl;cout this-memory endl;cout this-disk endl;cout this-screen endl;cout endl;}private:string cpu; //CPUstring disk; //磁盘string memory; //内存string screen; //显示屏 };//抽象的建造者抽象建造单位 class Builder { public:virtual void BuilderCpu() 0; //建造CPUvirtual void BuilderMemory() 0; //建造内存virtual void BuilderDisk() 0; //建造磁盘virtual void BuilderScreen() 0; //建造显示屏virtual Computer* GetComputer() 0; //出厂建造好的笔记本 };//具体的建造者具体施工单位、具体的建造方式 class DellBuilder : public Builder //dell笔记本 { private:Computer* computer; public:DellBuilder() {this-computer new Computer(); }void BuilderCpu() {this-computer-SetCPU(DELL CPU);}void BuilderMemory() {this-computer-SetMemory(DELL 内存);}void BuilderDisk() {this-computer-SetDisk(Dell 磁盘);}void BuilderScreen() {this-computer-SetScreen(DELL 显示屏);}Computer* GetComputer(){return this-computer;}};//具体的建造者具体施工单位、具体的建造方式 class AppleBuilder : public Builder //dell笔记本 {private:Computer* computer; public:AppleBuilder() {this-computer new Computer(); }void BuilderCpu() {this-computer-SetCPU(Apple CPU);}void BuilderMemory() {this-computer-SetMemory(Apple 内存);}void BuilderDisk() {this-computer-SetDisk(Apple 磁盘);}void BuilderScreen() {this-computer-SetScreen(Apple 显示屏);}Computer* GetComputer(){return this-computer;}};//指导者指挥具体的建造逻辑 class Director { public:Director(Builder* builder) {this-builder builder;}//建造逻辑void BuilderComputer() {//1.建造CPUthis-builder-BuilderCpu();cout first make cpu endl;//2.建造内存条this-builder-BuilderMemory();cout second make memory endl;//3.建造磁盘this-builder-BuilderDisk();cout third make disk endl;//4.建造显示屏this-builder-BuilderScreen();cout finally, make screen endl;}private:Builder* builder; };//客户端 int main() {Computer* computer NULL;Builder* builder NULL;Director* director NULL;//需求要一台dell笔记本builder new DellBuilder(); // 先找一个dell制造厂负责具体的创建director new Director(builder); //指导者指导Dell制造厂如何创建director-BuilderComputer(); //开始创建了。。。computer builder-GetComputer(); // 待建造完毕制造厂出货computer-ShowInfo(); //产品质检合格delete computer;delete director;delete builder;//制造Aplle比较笔记本同理可得。return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数显LED驱动芯片恒流数码管驱动IC内置显示RAM为816位 VK16D33

VK16D33是一种恒流数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、LED恒流驱动模块等电路。可以通过寄存器配置,调节扫描的位数,从而获得更大的单点驱动电流。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳…

详细介绍:【TEC045-KIT】基于复旦微 FMQL45T900 的全国产化 ARM 开发套件

详细介绍:【TEC045-KIT】基于复旦微 FMQL45T900 的全国产化 ARM 开发套件pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family…

【IEEE出版】2025年智慧物联与电子信息工程国际学术会议(IoTEIE 2025)

2025年智慧物联与电子信息工程国际学术会议(IoTEIE 2025)将于2025年10月17-19日在中国青岛举行。【EI/Scopus双检索:IEEE独立出版,检索非常稳定】 【征稿主题范围广,录用率高,2篇可享团队优惠,学生友好】 2025年智…

9.22 机房练习

9.22 机房练习 一、 引子 向 myk 大佬学习,养成写练习笔记的好习惯。 还有大约三十多天就复赛了,我的安排是保持每天一两道首银的题目 + 紫书上的题单,前面的是练习有一定难度的题目冲击高分,后面的是系统复习保持…

完整教程:stm32f103c8t6 led闪灯实验

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做jsp网站用哪些软件下载农副产品交易平台

苹果自带的“safari浏览器”正在悄悄“追踪”你的信息,这样做可以有效避免你的隐私信息不被泄露。说起苹果设备自带的APP,毫无疑问safari浏览器是其中的代表之一,很多朋友由于习惯的原因,大多在使用苹果设备的时候选择下载一些第三…

cms网站搭建顺德做网站公司哪家好

import os#判断文件夹是否存在 dir os.path.exists(C:\\Users\\Desktop) print(dir:, dir)#判断文件是否存在 file os.path.exists(C:\\Users\\Desktop\\雍正王朝.txt) print(file:, file)运行结果 显示该文件及文件夹都存在

网易云音乐wordpress插件aso安卓优化

目录 1. 前言 2. 用法回顾 2.1 使用方式 2.2 过滤器的定义 2.3 串联过滤器 3. 小结 1. 前言 过滤器在我们日常开发中应该算是一个非常常用的功能了,它经常会被用来格式化模板中的文本。过滤器可以单个使用,也可以多个串联一起使用,还可…

建站空间哪个好棋牌软件开发定制软件

以下是关于DDR4、DDR5、固态硬盘(SSD)和机械硬盘(HDD)在连续读/写、随机读/写性能的对比分析,结合技术特性与应用场景的总结: 一、性能对比表格 存储类型连续读(MB/s)连续写&#x…

无锡网站建设推荐手机分销网站公司

目录HOG是什么?HOG vs SIFTHOG步骤HOG在检测行人中的方式Opencv实现HOGDescriptor的构造函数:行人检测HOGSVM步骤简化版的HOG计算HOG是什么? 方向梯度直方图( Histogram of Oriented Gradient, HOG )特征是一种在计算机视觉和图像处理中用来进…

win2008网站404被称为网页制作三剑客的是

获取/查看本机出口ip curl http://members.3322.org/dyndns/getip

哪个网站做视频赚钱哈尔滨建筑专业网站

需求 使用Python基础写一个基于控制台的学生管理平台,里面功能分别是:1.录入学生信息2.查找学生信息3.删除学生信息4.修改学生信息5.排序6.统计学生总人数7.显示所有学生信息,要求数据存储在文件里。 代码 代码资源地址可以直接下载 效果图…

win2003怎么做网站扫一扫网页版在线使用

如果仅仅在数据库中设置了类型为 CLOB 字段类型,使用普通的 INSERT 语句直接写入数据到数据库的话,它依然会将其视为 VARCHAR 类型数据,并最大长度为 4000 字符。超过该长度会报出字符串超长,写入数据失败的错误。使用 Dapper 处理…

建站工具推荐网站开发毕业答辩问题

创建最高权限用户 进入 MySQL 容器的命令行界面。您可以使用以下命令&#xff1a; 修改配置文件my.cnf 无密码进入 [mysqld]下输入 skip-grant-tables重启mysql容器 进入容器内部 container_name 容器ID或name docker restart mysql docker exec -it <container_name>…

视频调色神器!CyberLink ColorDirector:从入门到专业的视频色彩魔法工具

描述 CyberLink ColorDirector是台湾Link Technologies开发的一款创意视频后期着色软件,旨在帮助您改进和增强视频颜色。 通过一系列易于使用的工具,您可以轻松地校正颜色、调整色调,甚至调整视频中移动对象的本地颜…

【AI智能体】Dify 搭建数据分析应用实战操控详解

【AI智能体】Dify 搭建数据分析应用实战操控详解2025-09-22 15:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

Leveraging Context-Aware Prompting for Commit Message Generation 论文笔记

介绍 (1) 发表:EMNLP24 (2) 背景 现有方法通常存在一些缺点,例如只关注变化的行是不够的,或者在变化周围包含不相关的行会带来噪声。如图 1 所示,添加和删除的代码实际上是相同的,只是位置不同,导致代码更改定义…

P4951 [USACO01OPEN] Earthquake 题解

111首先要知道 0/1 分数规划这个经典模型 给定 \(a_1,a_2....a_n\) 以及 \(b_1,b_2....b_n\) 求一组解 \(x_i(1\leq i \leq n,x_i \in [0,1] )\),使下列式子最大化: \[\frac {\sum_{i=1}^n a_i \times x_i}{\sum_{i=…

门户网站开发需求文档软件外包app

1.如图&#xff0c;实现功能: Hello World!字符串跟随鼠标移动鼠标左击Hello World!颜色为红色鼠标右击Hello World!颜色为蓝色鼠标滚轮滚动改变Hello World!颜色的RGB中的G值 2.实现工具: vs20133.实现步骤: 新建一个win32项目 如图,看到HelloWorldGame.cpp中 _tWinMain()的函…

网站备案信息变更买个小程序多少钱

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果&#xff1a; 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹&#xff0c;选中“Sharpen”&#xff08;锐化&#xff09;&#xff0c;增大“…