应用场景

  假设现在我们要设计DNF中的人物角色(鬼剑士、神枪手、魔法师、圣骑士、格斗家)。然而,利用面对对象的思想,必须先从实体入手,每一个角色都包含各种装备、武器、配饰,这些就当做要建造的零件,然后把装备零件组装起来,那么就是最终人物角色的能量值,然后它就将造成不同的伤害。

  回忆过程:假设要创建一个角色,先构建装备零件,控制者控制组装装备零件,构建者得到专属角色。

简述实现

  建造者模式:将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。

  建造者模式适用于构造一个很复杂的对象,将其拆分成很多个小对象,方便管理对象。

  

  控制者(Director):控制整个组合过程,通过调用Builder内部的各组件的生成方法进行组装。

  构建者(Builder):构建者接口,定义构建各部件的方法。

  实际构建者(ConcreteBuilder):具体构建出各部件对象,获得构造结构。

  成品(Product):成品类。

  成品类(Car)

public class Car {
//车头
private CarHead carHead;
//车身
private CarBody carBody;
//车轮
private Wheel wheel;
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Car() {}

</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Car(CarHead carHead, CarBody carBody, Wheel wheel) {
</span><span style="color: #0000ff;">super</span><span style="color: #000000;">();
</span><span style="color: #0000ff;">this</span>.carHead =<span style="color: #000000;"> carHead;
</span><span style="color: #0000ff;">this</span>.carBody =<span style="color: #000000;"> carBody;
</span><span style="color: #0000ff;">this</span>.wheel =<span style="color: #000000;"> wheel;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> run(){
System.out.println(</span>"车开着 嘟嘟嘟嘟!!!"<span style="color: #000000;">);
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> CarHead getCarHead() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> carHead;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setCarHead(CarHead carHead) {
</span><span style="color: #0000ff;">this</span>.carHead =<span style="color: #000000;"> carHead;
}
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> CarBody getCarBody() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> carBody;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setCarBody(CarBody carBody) {
</span><span style="color: #0000ff;">this</span>.carBody =<span style="color: #000000;"> carBody;
}
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Wheel getWheel() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> wheel;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setWheel(Wheel wheel) {
</span><span style="color: #0000ff;">this</span>.wheel =<span style="color: #000000;"> wheel;
}

}

class CarHead{

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

class CarBody{

private String name;

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

}

class Wheel{

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

成品类

  抽象构建者(Builder)

public interface Builder {
//构造车头
void builderCarHead();
//构造车身
void builderCarBody();
//构造轮子
void builderWheel();
//得到构建成品
Car getCar();
}

  实际构造者(CarBuilder)

public class CarBuilder implements Builder{
Car car=new Car();
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> builderCarHead() {
System.out.println(</span>"构建车头!"<span style="color: #000000;">);
car.setCarHead(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> CarHead());
} @Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> builderCarBody() {
System.out.println(</span>"构建车身!"<span style="color: #000000;">);
car.setCarBody(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> CarBody());
} @Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> builderWheel() {
System.out.println(</span>"构建轮子!"<span style="color: #000000;">);
car.setWheel(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Wheel());
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Car getCar(){
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.car;
}

}

  控制者(Director)

public class Director {
private Builder builder;
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Director(Builder builder) {
System.out.println(</span>"控制车组装"<span style="color: #000000;">);
</span><span style="color: #0000ff;">this</span>.builder=<span style="color: #000000;">builder;
builder.builderCarHead();
builder.builderCarBody();
builder.builderWheel();
}

}

  客户端(Client)

public class Client {
public static void main(String[] args) {
//制造零件
Builder builder=new CarBuilder();
//组装汽车
Director director=new Director(builder);
//获得制造结果
Car car=builder.getCar();
//汽车开始跑
car.run();
}
}

  构建者模式与工厂模式极为相似,建议还是用应用场景去记。而构建者模式相比于工厂模式它多了一个组装过程,而它的应用场景主要是用于构造一个复杂的对象,而工厂模式主要是专注于生产产品或者生产产品系列。当然,他们也可以结合,工厂模式专注于生产产品系列,而构建者模式专注于控制产品的构造流程,从而制造一个复杂的对象。对于设计模式不要拘泥于文字,主要是一种思想在我们运用的时候信手拈来。

版权声明

  作者:邱勇Aaron

  出处:http://www.cnblogs.com/qiuyong/

  您的支持是对博主深入思考总结的最大鼓励。

  本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,尊重作者的劳动成果。

建造者模式—设计角度重温DNF中的角色的更多相关文章

  1. 【设计模式】 模式PK:抽象工厂模式VS建造者模式

    1.概述 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可.而建造者模式则是要求按 ...

  2. C++设计模式之建造者模式(三)

    4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...

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

    前言 这篇文章主要向大家讲解什么是建造者模式,建造者模式的实例讲解及应用场景等知识点. 一.建造者介绍 ​ 用户可以不知道产品的构建细节直接可以创建复杂的对象,主要是分离了产品的构建和装配,这样就实现 ...

  4. 我的强迫症系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  5. 设计模式实战系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  6. .NET设计模式(4):建造者模式(Builder Pattern)(转)

    概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定. ...

  7. Builder 建造者模式

    简介 建造者模式的概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示. 大概的意思,就是一套的构建过程可以有不同的产品(表示)出来.这些产品(表示)都按照这一套的构建过程被 ...

  8. C#设计模式(5)——建造者模式

    1.建造者模式介绍 在软件开发中,有时我们要创建一个复杂的对象,这个对象由几个子部件按一定的步骤组合而成,这时候我们就可以使用建造者模式了.说到建造者我们首先想到的是盖房子,盖房子简单的说有三个步骤: ...

  9. .NET设计模式 第二部分 创建型模式(3)—建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对 ...

随机推荐

  1. AM335X开发板学习系列——环境搭建(vbox虚拟机ubuntu14.04下minicom的安装和配置)

    这个系列是我学习AM335X的总结. 1. ubuntu虚拟机的USB设备,选择启用usbserial 2. ubuntu虚拟机的网络,采用桥接模式,以保证开发板和ubuntu虚拟机能互相ping通 ...

  2. 跟着刚哥梳理java知识点——面向对象(八)

    面向对象的核心概念:类和对象. 类:对一类事物描述,是抽象的.概念上的定义. 对象:实际存在的该类事物的每个个体,因而也成为实例(Instance). Java类及类的成员:属性(成员变量Field) ...

  3. TaintDroid简介

    1.Information-Flow tracking,Realtime Privacy Monitoring.信息流动追踪,实时动态监控. 2.TaintDroid是一个全系统动态污点跟踪和分析系统 ...

  4. [bug] Cannot proceed because system tables used by Event Scheduler were found damaged at server start

    本地:mac 10.12.3  mysql 5.6 远程:linux 7.3    mysql 5.7.18.  (远程数据库yum安装,又5.6升级到5.7) 步骤:从本地数据库导出数据到远程数据库 ...

  5. Web层框架对网站中所有异常的统一解决

    一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常. 之前都是 ...

  6. 开发一款直播APP系统软件应该有哪些功能,如何开发?

    1.技术实现层面: 技术相对都比较成熟,设备也都支持硬编码.IOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版 ...

  7. MD5加密。

    MD5 是把文件用open打开,然后对内容hash后的值,所以和文件名无关,和位置无关,和修改时间无关,只与文件内容有关.

  8. HTC开放Vive Tracker代码啦!

    (52VR网2017年5月2日)HTC正在为工作室创建的Vive Tracker项目发布教程和项目文件,作为VR开发人员的新资源. 该公司希望能够让更多的开发者能够在开发Vive VR耳机时制作自己的 ...

  9. 七牛整合 ueditor (拦住那头牛,七牛又如何)

    最近遇到个项目,要求所有图片都必须整合到七牛上,看了把你谈文档踩在前辈们的基础上终于把他完成了,恰巧本屌丝最近刚好有时间,本着天下屌丝是一家的原则,和小朋友们一同学习 闲话少说入正题. 第一 :下载编 ...

  10. Hadoop集群

    你可以用以下三种支持的模式中的一种启动Hadoop集群: 单机模式 伪分布式模式 完全分布式模式 单机模式的操作方法 默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程.这对调试 ...