通过Builder模式,您可以以易于阅读的方式创建具有许多可选变量的类的实例。
考虑以下代码:
public class Computer { public GraphicsCard graphicsCard; public Monitor[] monitors; public Processor processor; public Memory[] ram; //更多类变量在这里... Computer(GraphicsCard g, Monitor[] m, Processer p, Memory ram) { //为简洁起见,省略了代码... } //类方法被省略... }
如果所有参数都是必需的,那么一切都很好。如果有更多的变量和/或其中一些是可选的怎么办?您不想使用必需参数和可选参数的每种可能的组合来创建大量的构造函数,因为它变得难以维护且开发人员难以理解。您可能也不想拥有一长串的参数,用户可能需要在其中输入许多为null。
Builder模式创建一个称为Builder的内部类,该类仅用于实例化所需的可选变量。这是通过针对每个可选变量的方法来完成的,这些方法将变量类型作为参数并返回一个Builder对象,以便这些方法可以彼此链接。任何必需的变量都会放入Builder构造函数中,这样就不会遗漏它们。
生成器还包含一个称为的方法build(),该方法返回其所在的对象,并且在构建对象时必须在方法调用链的末尾调用该方法。
在前面的示例之后,此代码对Computer类使用了Builder模式。
public class Computer { private GraphicsCard graphicsCard; private Monitor[] monitors; private Processor processor; private Memory[] ram; //更多类变量在这里... private Computer(Builder builder) { this.graphicsCard= builder.graphicsCard; this.monitors= builder.monitors; this.processor= builder.processor; this.ram= builder.ram; } public GraphicsCard getGraphicsCard() { return this.graphicsCard; } public Monitor[] getMonitors() { return this.monitors; } public Processor getProcessor() { return this.processor; } public Memory[] getRam() { return this.ram; } public static class Builder { private GraphicsCard graphicsCard; private Monitor[] monitors; private Processor processor; private Memory[] ram; public Builder(Processor p){ this.processor= p; } public Builder graphicsCard(GraphicsCard g) { this.graphicsCard= g; return this; } public Builder monitors(Monitor[] mg) { this.monitors= mg; return this; } public Builder ram(Memory[] ram) { this.ram= ram; return this; } public Computer build() { return new Computer(this); } } }
有关如何使用此类的示例:
public class ComputerExample { public static void main(String[] args) { Computer headlessComputer = new Computer.Builder(new Processor("Intel-i3")) .graphicsCard(new GraphicsCard("GTX-960")) .build(); Computer gamingPC = new Computer.Builder(new Processor("Intel-i7-quadcode")) .graphicsCard(new GraphicsCard("DX11")) .monitors(new Monitor[] = {new Monitor("acer-s7"), new Monitor("acer-s7")}) .ram(new Memory[] = {new Memory("2GB"), new Memory("2GB"), new Memory("2GB"), new Memory("2GB")}) .build(); } }
此示例说明了构建器模式如何在不费吹灰之力的情况下就如何为类创建提供了很大的灵活性。Computer对象可以基于调用者所需的配置以易于阅读的方式轻松实现。
本文向大家介绍javascript设计模式Constructor(构造器)模式,包括了javascript设计模式Constructor(构造器)模式的使用技巧和注意事项,需要的朋友参考一下 Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。Object构造器用于创建特定类型的对象–准备好对象以备使用,同事接收构造器可以使用参数,以在第一次创建对象时,设置成
本文向大家介绍java设计模式之适配器模式,包括了java设计模式之适配器模式的使用技巧和注意事项,需要的朋友参考一下 感谢《Android源码设计模式解析与实战》 何红辉 关爱民 著 适配器模式在我们的开发中使用率极高,从代码中随处可见的Adapter就可以判断出来,从最早的ListView、GridView、到现在最新的RecyclerView都需要使用Adapter,并且在开发中我们遇到的
本文向大家介绍Java设计模式之建造者模式(Builder模式)介绍,包括了Java设计模式之建造者模式(Builder模式)介绍的使用技巧和注意事项,需要的朋友参考一下 Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体
本文向大家介绍初识Java设计模式适配器模式,包括了初识Java设计模式适配器模式的使用技巧和注意事项,需要的朋友参考一下 【正文】 我们知道,Android中最重要也是最难用的UI控件就是ListView列表控件,而要想灵活运用它,则必须要用到适配器adapter,所以,我觉得还是很有必要来学习一下Java当中的适配器模式(不管以后能不能用到),毕竟Java语言是Android开发很重要的一个基
本文向大家介绍详解Java设计模式——迭代器模式,包括了详解Java设计模式——迭代器模式的使用技巧和注意事项,需要的朋友参考一下 迭代子模式 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图: 这个思路和我们常用的一
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。