一个很漂亮的建造者模式(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);
		}
	}
	
	@Override
	public 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应该用了同样的实现。

你可能感兴趣的:(设计模式,Hibernate,jpa)