建造者

[05]Go设计模式:建造者模式(Builder Pattern)

有些话、适合烂在心里 提交于 2019-12-16 09:48:10
目录 建造者模式 一、简介 二、代码 三:参考资料 建造者模式 一、简介 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 二、代码 package main import "fmt" //电脑对象的建造 type Computer interface { //主板制造 MakeCpu() //键盘制造 MakeKeyBoard() //屏幕制造 MakeScreen() } // 定义一个构建器 type Creator struct { computer Computer } // 创建一个电脑 func (d *Creator) Construct() *Computer { d.computer.MakeCpu() d.computer.MakeKeyBoard() d.computer.MakeScreen() return &d.computer } // 构建一个具体品牌的电脑 type HuaWeiComputer struct { Cpu string KeyBoard string Screen string } func (l *HuaWeiComputer)

设计模式-构建者模式

南笙酒味 提交于 2019-12-14 23:48:02
**建造者(Builder)模式的定义:** 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 该模式的主要 **优点** 如下: 各个具体的建造者相互独立,有利于系统的扩展。 客户端不必知道产品内部组成的细节,便于控制细节风险。 其 **缺点** 如下: 产品的组成部分必须相同,这限制了其使用范围。 如果产品的内部变化复杂,该模式会增加很多的建造者类。 **建造者模式注重零部件的组装过程**  构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。  最佳实例就是组装台式电脑的情况,我们可以分别购买主板、CPU、内存、硬盘等部件,然后将这些部件组装在一起就形成了一台完整的电脑。 在编写代码之前:举一个例子理解一下建造者模式。 ``` 我们要建一个厂,要选地址,买材料,设计。很繁琐。 这个时候我们可以找一个包工队,我们只需要把需求告诉包工队,其他的事情,包工队来做。 简单的说,我们给“钱”,其他的一切,包工队来做。 ``` 用通俗的话来说,建造者模式的优势就是 **把对象创建细节隐藏,使得使用者直接调用方法即可拿到对象

设计模式十——建造者模式

我的梦境 提交于 2019-12-14 07:26:15
建造者模式的介绍 将一个复杂对象的构建与它的表示分离,使得同样的过程可以建造不同的表示。该模式属于创建型模式。本质上该模式就是一个对象的创建不是该类自己进行创建而是通过其他类进行创建。 建造者模式参与角色 参与角色 功能 产品(Product) 是一个被构建的对象,其构建过程在具体建造者中实现 建造者(builder) 是具体建造者抽象或接口,内部是复杂产品的构建方法,但本身并不实现相关功能 具体建造者(ConcreteBuilder) 实现建造者的的相关功能,用于对产品进行构建,具体化复杂对象各部分的创建 指挥者(director) 指挥建造的具体流程,在内部持有一个建造者的引用,并实现了建造一个产品的流程 建造者模式UML 相关案例 在小明的表哥帮助小明组装好电脑后,小明的两个同学小红和小王也想让他的表哥帮他们组装电脑,他们把他们组装的电脑组件都给了小明,他们组装电脑的配件是不一致的。下面我们将使用建造者模式来实现这个案例。 案例分析 分析题目我们可以知道需求为获得两台组装好的电脑,我们需要使用建造者模式来实现。 使用建造者模式我们来划分四个角色 产品(product):电脑,我们需要定义一个电脑类,在内部有组装电脑的各种 方法。 建造者(builder):定义一个组装各个配件的抽象方法。 具体建造者:有两个,一个是构建小红电脑的构建者,一个是构建小王电脑的构建者

23种设计模式知识点详细解析(含PDF学习资料)

可紊 提交于 2019-12-10 23:37:21
前言: Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。虽然不需要全会,当然能掌握的越多越好。 总体来说设计模式分为三大类: 创建型模式 共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式 共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式 共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 由于篇幅的限制,没有办法把23种设计模式全部详细的分享给大家,但是整理成了Pdf资料可以分享,关注我的供种浩(Java周某人)即可 一.单例模式(Singleton Pattern) 定义: Ensure a class has only one instance, and provide a global point of accessto it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码(是线程安全的) 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; ●

设计模式之建造者模式

て烟熏妆下的殇ゞ 提交于 2019-12-10 03:51:44
2018-09-18 22:19:07 依赖倒转原则   高层模块不依赖低层模块,二者都不依赖细节。抽象不应该依赖细节,细节应该依赖于抽象。这句话什么意思呢,就是说你有一个虚基类(抽象),这个基类每一个方法都有明确的含义,稳定的传参形式和返回类型。不管子类如何实现这些方法(细节),只要完成了基类要求的功能即可。 建造者模式   如果,你需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示时,此时就需要建造者模式(Builder)又叫做生成器模式。建造者模式可以将一个产品内部表象与产品的生成过程分隔开来,从而可以使一个建造过程具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体的建造过程和细节就不需要知道了。   建造者(Builder)模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。   使用建造者流程:1.抽象出一个稳定的建造流程(就是一个包含一些列方法的虚基类咯);           2.当需要构建一个符合这个建造流程的对象时,我们只需要从虚基类中派生出一个子类,子类按照自己的特殊要求去实现基类的方法即可。           3.构建指挥者(Director)类,这在建造者模式中是非常重要的一个类,用它来控制建造流程,也用它来隔离用户与建造过程的关联

第十三章-建造者模式

早过忘川 提交于 2019-12-09 15:38:50
建造者模式(Builder): 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 它主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构造通常面临着复杂的变化。 建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。 基本代码 #include<iostream> #include<string> #include<vector> using namespace std; //Product类,产品类,由多个部件组成 class Product { private: vector<string> parts; public: void add(string part) { parts.push_back(part); } void show() { cout << "\n产品 创建------"; for (auto _i : parts) cout << _i; } }; //Builder类---抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult class Builder { public: virtual void BuildPartA() = 0;

建造者模式和工厂模式的区别

て烟熏妆下的殇ゞ 提交于 2019-12-06 22:14:27
它们目的都是创建一个对象 工厂模式注重的是整体对象的创建方法,而建造者模式注重的是对象的创建过程,创建对象的过程方法可以在创建时自由调用。 看一下建造者模式的例子就明白了: 1 public class EmployeeBuilder 2 { 3 private int id = 1; 4 private string firstname = "first"; 5 private string lastname = "last"; 6 private DateTime birthdate = DateTime.Today; 7 private string street = "street"; 8 9 public Employee Build() 10 { 11 return new Employee(id, firstname, lastname, birthdate, street); 12 } 13 14 public EmployeeBuilder WithFirstName(string firstname) 15 { 16 this.firstname = firstname; 17 return this; 18 } 19 20 public EmployeeBuilder WithLastName(string lastname) 21 { 22 this

设计模式——个人理解

这一生的挚爱 提交于 2019-12-06 08:25:43
写在前面 设计模式是基于固定设计场景的一套解决方案,目的是为了完成开闭原则,或者说面向后续的需求变更,以成本最低的改动和测试完成新功能。同时设计模式也是一种程序员之间的交流语言,可以省去很多沟通成本。 在工作的过程中,从最初不知如何使用设计模式,到中间刻意使用设计模式,到今天稍有好转的正确的使用设计模式,踩了许多坑,也有过度设计的时候,为了避免今后在犯同样的错误,所以准备将自己在项目实践的过程中使用过的设计模式记录下来。 设计模式中,有一些实战里用过,有的没用过,没用过的应该是对这个设计方法没有领悟透彻,所以不知道该怎么用。 目前先按照自己的理解记录下来,有更深的领悟会更新。 创建型设计模式 1、工厂方法模式(FactoryMethod) 工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。” 工厂方法模式,是在抽象类中定义创建对象的方法,调用声明创建过程(抽象方法,但创建对象的过程的实现是在实现类中定义。 也就是说,在创建对象时,创建步骤是固定的,但各个步骤的实现是多种多样的,这种情况下可以使用工厂方法。 例如:创建一个电脑主机,需要安装CPU,内存,硬盘,显卡。这个安装步骤是固定的,但是由不同的工厂实现类去实现这几个步骤。 这种父类声明,子类实现的方式有很多,把这种方法用于创建对象,就叫工厂方法

python建造者模式_1

谁都会走 提交于 2019-12-06 06:59:57
建造者模式 与工厂模式的区别: 工厂模式/抽象工厂模式与建造者模式最大的区别在于,工厂模式直接返回一个实例,使用实例的内在方法(各实例间使用同名方法) 工厂模式:调用工厂类直接返回一个可操作性实例 建造者模式:一个和多个对象类(内在方法),由指挥类去组装 来源: https://www.cnblogs.com/kaiseryin/p/11967656.html

建造者模式

空扰寡人 提交于 2019-12-06 02:34:05
-- 什么是建造者模式? -- 建造者模式应用场景? -- 建造者模式和工厂模式的区别? 定义 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。 应用场景 建造者(Builder)模式创建的是复杂对象,其产品的各个部分经常面临着剧烈的变化,但将它们组合在一起的算法却相对稳定,所以它通常在以下场合使用。 创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。 创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。 实现 展现的是《设计模式之禅》里面的例子。以车模型为例,每种车都可根据几个动作排布。 CarModel.java public abstract class CarModel { private ArrayList<String> sequence = new ArrayList<>(); protected abstract void start(); protected abstract void stop(); protected abstract void alarm(); protected abstract void engineBoom(); final public void run() { for (int i = 0; i < this.sequence