允许函式在没有传入值的情况下,以指定的预设值初始化。
public class Person{
private String name;
private int age;
private int gender;
public Person(String name, int age, int gender){
this.name = name;
this.age = age;
this.gender = gender;
}
public Person(int age, int gender){
this.name = "noName"; // 预设参数
this.age = age;
this.gender = gender
}
}
透过介面定义一个创建的过程,将物件的建构过程隐藏
* 使用情境: 当传入的物件较为复杂时, 分离创建步骤, 使创建过程更清晰 (请自行搜寻, 本篇不讨论)
public class Person{
...
public Person(String name, int age, int gender){
...
}
}
public interface Builder{ //以介面分离
void setName(String name);
void setAge(int age);
void setGender(int gender);
void Person create();
}
public class concreteBuilder implements Builder{
// 实作介面方法
}
public class Person{
...
private Person(String name, int age, int gender){
// 将建构子存取权限设为私有, 让使用者无法直接创建
...
}
public static class Builder{
// 透过静态Builder 物件创建物件
private String name;
private int age;
private int gender;
public Builder(){
// 不需参数即可创建 (使用预设值)
this.name = "Diane";
this.age = 18;
this.gender = 2;
}
public Builder setName(String name){
// 开放方法让使用者可以选择性输入
this.name = name;
return this;
}
....
public Person creat(){
// 必须透过Builder呼叫才可以创建物件
retrun new Person(name,age,int);
}
}
}
public class Main {
public static void main(String[] args){
Person person = new Person.Builder().setName("Tina").create();
Person person2 = new Person.Builder().create();
System.out.println(person.getName()); //Tina
System.out.println(person2.getName()); //Diane
}
}
今天我们来练习制作一个可互动的 Spotify Sign-in 低精度原型吧! 首先,用昨天教学的...
1239. Maximum Length of a Concatenated String with...
物件 Object 除了基本型别其他都可以归类至物件型别 建立一个自定义的物件主要有两种方式,一个是...
前言 目标:串接虾皮订单、标签资讯,目前串接虾皮 OpenAPI 2.0 版本,串接手册 串接步骤:...
Hi,Сәлам,我是Charlie! 在Day05当中我们完成了Django的基本架构跟资料库,今...