- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试编写构建器模式以更好地理解。我主要依赖 GOF 和维基百科。所以我的对象是一个具有必需属性区域和一些可选属性(如 window 、门、房间等)的房子我将向您展示代码。现在,我不太确定它是否正确,我想我没有导演?我不明白在哪些情况下您需要一个以及它是如何工作的。
这是我的类(class)房屋和内部类(class) HouseBuilder
public class House {
//required
private final String area;
//optional
private int windows;
private int doors;
private int rooms;
//constructor with HouseBuilder
private House(HouseBuilder builder) {
this.windows = builder.windows;
this.doors = builder.doors;
this.rooms = builder.rooms;
}
public static class HouseBuilder {
//required
private String area;
//optional
private int windows;
private int doors;
private int rooms;
//constructor with required attributes
HouseBuilder(String area) {
this.area = area;
}
//optional attributes
public HouseBuilder windows(int windows) {
this.windows = windows;
return this;
}
public HouseBuilder doors (int doors) {
this.doors = doors;
return this;
}
//function for building
public Housebuild() {
return new House(this);
}
}
现在,我刚刚得到了一个类演示,我可以在其中 build 这样的房子:
House house = new House.HouseBuilder("Downtown")
.doors(3).windows(2).build();
但这并不是书中那样的导演。我的想法是否正确?为什么这比仅仅使用 setter 更好?
谢谢!
最佳答案
您的示例说明了经典构建器。 Director 类似于一个抽象构建器,在实践中很少使用它,因为客户端类可以很好地处理它。您的案例中的董事示例如下:
public class House
{
public final String area;
public windows;
public int doors;
public int rooms;
}
interface HouseBuilder
{
public HouseBuilder area();
public HouseBuilder windows();
public HouseBuilder doorsors();
public HouseBuilder rooms();
public House build();
}
public static class DowntownHouseBuilder implements HouseBuilder
{
House downtownHouse = new House();
public HouseBuilder area()
{
downtownHouse.area = "Downtown";
}
public HouseBuilder windows()
{
downtownHouse.windows = 3;
return this;
}
public HouseBuilder doors()
{
downtownHouse.doors = 2;
return this;
}
public HouseBuilder rooms()
{
downtownHouse.rooms = 2;
return this;
}
public House build()
{
return downtownHouse;
}
}
public static class VilaBuilder implements HouseBuilder
{
House vila new House();
public HouseBuilder area()
{
vila.area = "Downtown";
}
public HouseBuilder windows()
{
vila.windows = 24;
return this;
}
public HouseBuilder doors()
{
vila.doors = 5;
return this;
}
public HouseBuilder rooms()
{
downtownHouse.rooms = 10;
return this;
}
public House build()
{
return vila;
}
}
class Driector
{
private HouseBuilder houseBuilder;
public Driector(HouseBuilder houseBuilder)
{
this.houseBuilder = houseBuilder;
}
public House buildHouse()
{
return this.houseBuilder.area()
.windows()
.doors()
.rooms()
.buid();
}
}
class HouseConstruction
{
public static void main(String[] args)
{
Director director = new Director(new VilaBuilder());
House house = director.buildHouse();
System.out.println("Builder constructed: "+ house);
}
}
希望这有助于澄清什么是 Builder 模式中的 Director。
关于java - 我正在尝试理解建筑模式,但我与导演之间存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58375238/
如何判断在现有的 Firebird RDBMS 服务器(即经典服务器或 super 服务器)上安装/配置/运行的架构? 如何在两种模式之间切换? Firebird 的哪些版本(1.5、2.0、2.1)
我很困惑。我有一个运行Ubuntu 14.04的VM。我在这里遵循了以下程序:http://clang.llvm.org/docs/LibASTMatchersTutorial.html,现在正在运行
cli(命令行)这样说: Failed to apply plugin [id 'com.android.library'] Could not create plugin of type 'Libr
我正在尝试构建自己的 gem,但出现了该错误。我认为这是因为我更改了gemspec 的文件名 的原因。首先这是我的结构: myapp/ my-app.gemspec documenta
因此,当我运行我的angular 2应用程序后,我的angular 2应用程序不再起作用。没有错误出现,但是该应用程序不再知道如何路由,因此根据我的index.html,它只是在加载时卡住了。 asa
我正在尝试为Spring Batch 2.1.6构建示例应用程序。 (即spring-batch-2.1.6.RELEASE/samples/spring-batch-samples)使用Maven,
从源代码编译 R-3.3.2。我的标志包括 --with-libtiff。它们是:./configure --with-system-tre --with-blas --with-lapack --w
我正在构建 AOSP,我想用我自己的 key 对构建进行签名。有一些关于此过程的官方文档 here . 但我想知道我是否可以简单地扭转所有流程并改为执行以下操作: 删除位于 build/target/
我可能会问一个愚蠢/基本的问题,但我对 ANTLR AST 构建感到困惑。 我想做的是一种 bool 表达式解析器,这样在父节点上我有运算符及其操作数作为子节点。比如一句话 ( ( A B C & D
我想用“go build”构建我的项目。我还没有找到任何关于如何将 swig 与 go 构建过程集成的文档。而且也很重要,它应该是一个 C++ 示例 C 很容易。 foo.swig /* foo.i
我正在使用 VisualStudio 2013 为 Windows 7 编译 PCL,但我在 include/flann/util/serialization.h 中遇到错误: error C2228
我是一名优秀的程序员,十分优秀!