为什么要去耦合
耦合给修改带来了麻烦
封装,对外暴露尽可能少的接口
public是不安全的,所有人都可以修改它,你代码改变后使用你代码的人必须改变
使用private+getter setter
访问控制符
public(所有人都可以访问)
private(只有自己可以访问)
package private(包级私有)
protected(只有子类和同一个包的可以访问)
注意:包(包没有嵌套包含关系)的一大功能就是命名空间
JavaBean命名约定
非布尔值
getter名为get+首字母大写的属性名
setter名为set+首字母大写的属性名
布尔值
getter名为is+首字母大写的属性名
setter名为set+首字母大写的属性名
一个🌰
private String name;
private boolean fat;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public boolean isFat(){
return fat;
}
public void setFat(boolean fat){
this.fat = fat;
}
这个约定有啥用呢?
在将Java对象转化为JSON时,只能根据JavaBean命名约定的getter/setter来生成属性名
挖个坑:有哪些好用的json库?
工厂设计模式
优点
将构造器私有化,用工厂设计模式做接口
- 静态工厂有名字
- 根据传入的参数决定要不要生成对象(不需要每次都创建对象)
缺点
- 不能被子类化
- 不容易被找到
builder模式
解决类型一样的参数过多的问题
public class UserBuilder {
private String firstName;
private String lastName;
private String phoneNumber;
private String address;
public UserBuilder(String firstName, String lastName, String phoneNumber, String address) {
this.firstName = firstName;
this.lastName = lastName;
this.phoneNumber = phoneNumber;
this.address = address;
}
}
比如一个有很多String属性的类,构造它的时候要给它传一长串的值,不方便看.而且如果你要给它设置默认值需要n多构造器.这时候只要搞个builder出来就可以啦.
public final class UserBuilder {
private String firstName;
private String lastName;
private String phoneNumber;
private String address;
private UserBuilder() {
}
public static UserBuilder anUser() {
return new UserBuilder();
}
public UserBuilder withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public UserBuilder withLastName(String lastName) {
this.lastName = lastName;
return this;
}
public UserBuilder withPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
return this;
}
public UserBuilder withAddress(String address) {
this.address = address;
return this;
}
public User build() {
return new User(firstName, lastName, phoneNumber, address);
}
}