构建者模式又叫建造者模式(Builder),是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。本文以创建计算机为例,使用Matlab语言来实现。
Computer.m (要构造的复杂对象)

classdef Computer < handle
properties
name = "";
CPU = "";
memory = "";
disk = "";
end
methods
function set.name(obj,name)
obj.name = name;
end
function name = get.name(obj)
name = obj.name;
end
function set.CPU(obj,CPU)
obj.CPU = CPU;
end
function CPU = get.CPU(obj)
CPU = obj.CPU;
end
function set.memory(obj,memory)
obj.memory = memory;
end
function memory = get.memory(obj)
memory = obj.memory;
end
function set.disk(obj,disk)
obj.disk = disk;
end
function disk = get.disk(obj)
disk = obj.disk;
end
function showInfo(obj)
disp("Computer:"+obj.name+"{CPU:"+obj.CPU+",memory:"+obj.memory+",disk:"+obj.disk+"}");
end
end
end

Builder.m (抽象的构造者)

classdef Builder < handle
methods(Abstract)
setName(~,~);
setCPU(~,~);
setMemory(~,~);
setDisk(~,~);
build(~);
end
end

ConcreteBuilder.m (具体的构造者)

classdef ConcreteBuilder < Builder
properties
name = "";
CPU = "";
memory = "";
disk = "";
end
methods
function obj = setName(obj,name)
obj.name = name;
end
function obj = setCPU(obj,CPU)
obj.CPU = CPU;
end
function obj = setMemory(obj,memory)
obj.memory = memory;
end
function obj = setDisk(obj,disk)
obj.disk = disk;
end
function computer = build(obj)
computer = Computer();
computer.name = obj.name;
computer.CPU = obj.CPU;
computer.memory = obj.memory;
computer.disk = obj.disk;
end
end
end

Director.m (指导者,负责调用构造对象的逻辑,控制相应的构造顺序)

classdef Director
methods
function computer = getComputer(~,builder)
computer = builder.setName("dell")...
.setCPU("intel i5")...
.setMemory("4G")...
.setDisk("1T")...
.build();
end
end
end

测试代码:

builder = ConcreteBuilder();
director = Director();
computer = director.getComputer(builder);
computer.showInfo();

Matlab建造者模式的更多相关文章

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

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

  2. PHP设计模式(五)建造者模式(Builder For PHP)

    建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式. 设计场景: 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,爱好等信息,才能获得用 ...

  3. java设计模式之建造者模式

    学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...

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

    一.首先看建造者模式的UML图: 二.再来看一个建造者模式的例子 class Builder { public: virtual void BuildHead() {} virtual void Bu ...

  5. C#设计模式之建造者模式

    建造者模式可以将部件本身和它们的组装过程分开,关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而无须知道其内部的具体构造细节. 建造者模式:将一个复杂对象 ...

  6. C#设计模式-建造者模式

    在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成. 例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由C ...

  7. C#设计模式系列:建造者模式(Builder)

    1.建造者模式简介 1.1>.定义 建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 1.2>.使用频率 中低 1.3>.原型模式应用 ...

  8. Java设计模式之建造者模式(Builder)

    前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...

  9. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

随机推荐

  1. 高通qxdm抓取sensor的log【学习笔记】

    高通qxdm抓取sensor的log 打开qxdm,打开设置界面,去掉其他无关的log,打开Log packets .Message packets的SNS的log 之后需要把端口打开,把端口打开之后 ...

  2. The Rise of Meta Learning

    The Rise of Meta Learning 2019-10-18 06:48:37 This blog is from: https://towardsdatascience.com/the- ...

  3. CMU Advanced DB System - MVCC

    https://zhuanlan.zhihu.com/p/40208895 Mysql的MVCC实现 https://severalnines.com/database-blog/comparing- ...

  4. PHP系列 | PHPexcel导入xls格式 ,提示错误:iconv(): Wrong charset, conversion from `CP936' to `UTF-8' is not allowed

    导入xls格式(2003版本)时会报错提示错误信息 iconv(): Wrong charset, conversion from `CP936' to `UTF-8' is not allowed[ ...

  5. Mapbox矢量瓦片标准(mapbox vector-tile-spec)

    目录 1. 目标 2. 文件格式 2.1. 文件后缀 2.2 MIME类型 3. 投影和范围 4. 内部结构 4.1. 图层 4.2. 要素 4.3. 几何图形编码 4.4. 要素属性 4.5. 示例 ...

  6. 解决mysql的in条件中参数是带引号的字符串的时候查询失效

    原文链接:https://blog.csdn.net/u014520745/article/details/54091256

  7. 012-MySQL 索引添加以及优化说明

    一.索引概述 数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度. 如果查询语句使用索引(通常是wher ...

  8. Linux下 nohup后台运行springboot jar 包时,使用指定的 application.yml配置

    jar 包启动时指定配置文件 application.yml nohup java -jar -Dserver.port=8080 wx-member-card-0.0.1-SNAPSHOT.war ...

  9. 文件组 'PRIMARY' 已满 解决办法

    修改一个字段类型时,报的这个错. 此时需要增加次要数据文件 次要数据文件 次要数据文件包含除主要数据文件外的所有数据文件.有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件.次要数据文件 ...

  10. java Random 随机重排

    将一个数组或序列随机重新排列. /** * Created by xc on 2019/11/23 * 随机重排 */ public class Test7_7 { public static voi ...