最近在看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