一个很漂亮的建造者模式(hibernate的sessionfactory实现?)
public class Bread {//所有原料单位为g//必须原料private double water;private double flour;private double soda;//以下都是可选原料private double salt;private double suger;private double fat;private double egg;private Bread(Build build) {this.egg = build.egg;this.fat = build.fat;this.flour = build.flour;this.salt = build.salt;this.soda = build.soda;this.suger = build.suger;this.water = build.water;}public static class Build {//必须原料private double water;private double flour;private double soda;//以下都是可选原料private double salt;private double suger;private double fat;private double egg;public Build(double water, double flour, double soda) {this.water = water;this.flour = flour;this.soda = soda;}public Build salt(double val) {this.salt = val;return this;}public Build suger(double val) {this.suger = val;return this;}public Build fat(double val) {this.fat = val;return this;}public Build egg(double val) {this.egg = val;return this;}public Bread build() {return new Bread(this);}}@Overridepublic String toString() {return String.format("蛋:%.2f 油:%.2f 面粉:%.2f 盐:%.2f 苏打:%.2f 糖:%.2f 水:%.2f", this.egg, this.fat, this.flour, this.salt, this.soda, this.suger, this.water);}public static void main(String[] args) {System.out.println(new Build(500.0, 200.0, 30.5).egg(10.2).fat(15.5).build());}}?
内部类+建造者模式,当一个物体有很多可选参数的时候,是一个绝佳的设计模式。
hibernate的sessionfactory和jpa的entitymanger应该用了同样的实现。
1 楼 bitlanghen 2011-08-30 原来是传说中的DSL啊