• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

背景:

当一个类的构造函数参数个数超过四个,而且这些参数有些是可选的参数,考虑使用构造者模式。

当一个类的构造函数参数超过四个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。例如我们现在有如下一个类计算机类电脑,其中中央处理器与公羊是必填参数,而其他3个是可选参数,那么我们如何构造这个类的实例呢,通常有两种常用的方式:

公共类计算机{

私有字符串cpu//必须

私有字符串ram//必须

private int usbCount//可选

私弦键盘;//可选

私有字符串显示;//可选

}

第一:折叠构造函数模式(伸缩构造器模式),这个我们经常用,如下代码所示

公共类计算机{

.

公共计算机(字符串中央处理器,字符串ram) {

这个(cpu,ram,0);

}

公共计算机(字符串中央处理器,字符串ram、int usbCount) {

这(cpu、ram、USB计数)罗技键盘');

}

公共计算机(字符串中央处理器,字符串ram、int usbCount、字符串键盘){

这(cpu、内存、USB计数、键盘、'三星显示器');

}

公共计算机(字符串中央处理器,字符串ram、int usbCount、字符串键盘、字符串显示器){

this.cpu=cpu

this.ram=ram

这个。USB计数=USB计数;

this.keyboard=键盘;

this.display=显示

}

}

第二种:Javabean模式,如下所示

公共类计算机{

.

公共字符串getCpu() {

返回中央处理器

}

public void setCpu(String cpu) {

this.cpu=cpu

}

公共字符串getRam() {

返回公羊

}

公共void setRam(字符串ram) {

this.ram=ram

}

public int getUsbCount() {

返回usbCount

}

.

}

那么这两种方式有什么弊端呢?

第一种主要是使用及阅读不方便。你可以想象一下,当你要调用一个类的构造函数时,你首先要决定使用哪一个,然后里面又是一堆参数,如果这些参数的类型很多又都一样,你还要搞清楚这些参数的含义,很容易就传混了。那酸爽谁用谁知道。

第二种方式在构建过程中对象的状态容易发生变化,造成错误。因为那个类中的属性是分步设置的,所以就容易出错。

为了解决这两个痛点,构建者模式就横空出世了。

下面代码就是最终的样子

公共类计算机{

私有最终字符串cpu//必须

私有最终字符串ram//必须

private final int usbCount//可选

私人最终字符串键盘;//可选

私有最终字符串显示;//可选

私人计算机(构建器构建器){

这个。CPU=构建器。CPU

这个。ram=构建者。ram

这个。USB计数=生成器。USB计数;

这个。键盘=生成器。键盘;

this.display=builder。显示器;

}

公共静态类生成器{

私有字符串cpu//必须

私有字符串ram//必须

private int usbCount//可选

私弦键盘;//可选

私有字符串显示;//可选

公共生成器(字符串杯子,字符串ram){

this.cpu=cup

this.ram=ram

}

公共生成器setUsbCount(int usbCount) {

这个。USB计数=USB计数;

还这个;

}

公共生成器setKeyboard(字符串键盘){

this.keyboard=键盘;

还这个;

}

公共生成器设置显示(字符串显示){

this.display=显示

还这个;

}

公共计算机内部版本(){

归还新电脑(本);

}

}

//省略吸气剂方法

}

如何使用

在客户端使用链式调用,一步一步的把对象构建出来。

电脑电脑=新电脑。构建器('因特尔','三星)。setDisplay('三星24寸)。setKeyboard('罗技)。setUsbCount(2)。build();

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now