最近在看Effective Java这本书,感觉写的还可以。只是觉得全英文还是有点难懂(看来我的英文水平还有待提高啊!!!)
Ttem 2 :(看下面的几段代码,有关设计模式,当然都有有点有缺点)
package EightthWeek;
//Telescoping constructor pattern - does not scale well
public class NutritionFacts1 {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public NutritionFacts1(int servingSize, int servings) {
this(servingSize,servings,0);
}
public NutritionFacts1(int servingSize, int servings, int calories) {
this(servingSize,servings,calories,0);
}
public NutritionFacts1(int servingSize, int servings, int calories, int fat) {
this(servingSize,servings,calories,fat,0);
}
public NutritionFacts1(int servingSize, int servings, int calories,
int fat, int sodium) {
this(servingSize,servings,calories,fat,sodium,0);
}
public NutritionFacts1(int servingSize, int servings, int calories,
int fat, int sodium, int carbohydrate){
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
this.sodium = sodium;
this.carbohydrate = carbohydrate;
}
}
package EightthWeek;
//JavaBeans Pattern - allows inconsistency, mandates mutablility
@SuppressWarnings("unused")
public class NutritionFacts2 {
private int servingSize= -1;
private int servings = -1;
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public NutritionFacts2() {
}
//Settlers
public void setServingSize(int val){
this.servingSize = val;
}
public void setServings(int val){
servings = val;
}
public void setCalories(int val){
calories = val;
}
public void setFat(int val){
fat = val;
}
public void setSodium(int val){
sodium = val;
}
public void setCarbohydrate(int val) {
carbohydrate = val;
}
public static void main(String args[]){
NutritionFacts2 cocaCola = new NutritionFacts2();
cocaCola.setServingSize(240);
cocaCola.setServings(30);
cocaCola.setCalories(100);
cocaCola.setSodium(28);
cocaCola.setFat(10);
cocaCola.setCarbohydrate(200);
}
}
package EightthWeek;
//Builder Pattern
@SuppressWarnings("unused")
public class NutritionFacts3 {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
//Required parameters
private final int servingSize;
private final int servings;
//Optional parameter - initialized to default values
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public Builder(int servingSize, int servings){
this.servingSize = servingSize;
this.servings = servings;
}
public Builder calories(int val){
calories = val;
return this;
}
public Builder fat(int val){
fat = val;
return this;
}
public Builder sodium(int val){
sodium = val;
return this;
}
public Builder carbohydrate(int val){
carbohydrate = val;
return this;
}
public NutritionFacts3 build(){
return new NutritionFacts3(this);
}
}
private NutritionFacts3(Builder builder){
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
public static void main(String args[]){
NutritionFacts3 cocaCola = new NutritionFacts3.Builder(240,8).
calories(100).sodium(23).carbohydrate(27).build();
}
}
尤其是最后一段代码,个人觉得这种写法还是比较好的,它实现了级联式的方法调用!这个虽然以前也见过,但是自己在写代码时还是用的很少!以后要多像这样谢谢Java代码!在编程中,设计模式算是比较难懂的(个人觉得而已,当然算法最难咯),最近也有看设计模式,但是空余时间比较少,看的不多。反正我现在觉得就是,越是对门技术有所了解,就越会觉得还有更多的东西没有懂。我想这种感觉应该是好的吧!
明天还有竞赛,对自己说GOOD LUCK