标签:ack 代码 back 分享 pat http 理解 target col
本文的内容:
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
可以理解为对象的分步构建或者逐步完善。
1. Builder:
2. ConcreteBuilder:
3. Director
4. Product
下面是一个比较简单粗暴的栗子:
1. Builder:创建对象的抽象接口定义
这定义了一个接口,接口中的方法时对象相关部件的创建方式。
1 public interface WeatherBuilder { 2 3 public void setTemperature(double temperature); 4 public void setHumidity(double humidity); 5 public void setWeatherDescribe(String weatherDescribe); 6 public Weather buildWeather(); 7 }
2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。
这是一些具体的实现。实现一:HotWeatherBuilder,代表炎热的天气。
1 public class HotWeatherBuilder implements WeatherBuilder{ 2 3 private Weather weather; 4 public HotWeatherBuilder() { 5 weather = new Weather(); 6 System.out.println("Build HotWeatherBuilder"); 7 } 8 @Override 9 public void setTemperature(double temperature) { 10 this.weather.setTemperature(temperature); 11 } 12 13 @Override 14 public void setHumidity(double humidity) { 15 this.weather.setHumidity(humidity); 16 } 17 18 @Override 19 public void setWeatherDescribe(String weatherDescribe) { 20 this.weather.setWeatherDescribe(weatherDescribe); 21 } 22 23 @Override 24 public Weather buildWeather() { 25 return this.weather; 26 } 27 28 }
实现二:ColdWeatherBuilder代表寒冷天气。
1 public class ColdWeatherBuilder implements WeatherBuilder{ 2 3 private Weather weather; 4 public ColdWeatherBuilder(){ 5 weather = new Weather(); 6 System.out.println("Build ColdWeatherBuilder"); 7 } 8 @Override 9 public void setTemperature(double temperature) { 10 this.weather.setTemperature(temperature); 11 } 12 13 @Override 14 public void setHumidity(double humidity) { 15 this.weather.setHumidity(humidity); 16 } 17 18 @Override 19 public void setWeatherDescribe(String weatherDescribe) { 20 this.weather.setWeatherDescribe(weatherDescribe); 21 } 22 23 @Override 24 public Weather buildWeather() { 25 return this.weather; 26 } 27 28 }
3. Director:构造一个使用Builder接口的对象。
这里用main方法直接干,其实把调用具体的构建过程再做个封装会好点。。。
1 public class BuilderTestApp { 2 //Here we use main-test as a Director 3 public static void main(String[] args) { 4 //use the Builder 5 WeatherBuilder hwb = new HotWeatherBuilder(); 6 hwb.setHumidity(90.0); 7 hwb.setTemperature(35.0); 8 hwb.setWeatherDescribe("It is too hot."); 9 //then get the product 10 Weather hw = hwb.buildWeather(); 11 System.out.println("Humidity : " + hw.getHumidity()); 12 System.out.println("Temperature : " + hw.getTemperature()); 13 System.out.println("WeatherDescribe : " + hw.getWeatherDescribe()); 14 15 WeatherBuilder cwb = new ColdWeatherBuilder(); 16 cwb.setHumidity(30.0); 17 cwb.setTemperature(-5.0); 18 cwb.setWeatherDescribe("It is too cold."); 19 Weather cw = cwb.buildWeather(); 20 System.out.println("Humidity : " + cw.getHumidity()); 21 System.out.println("Temperature : " + cw.getTemperature()); 22 System.out.println("WeatherDescribe : " + cw.getWeatherDescribe()); 23 } 24 }
4. Product:具体的对象,内部有各个组件的装配方式。
1 public class Weather { 2 3 private double temperature; 4 private double humidity; 5 private String weatherDescribe; 6 //all getters and setters 7 public double getTemperature() { 8 return temperature; 9 } 10 public void setTemperature(double temperature) { 11 this.temperature = temperature; 12 } 13 public double getHumidity() { 14 return humidity; 15 } 16 public void setHumidity(double humidity) { 17 this.humidity = humidity; 18 } 19 public String getWeatherDescribe() { 20 return weatherDescribe; 21 } 22 public void setWeatherDescribe(String weatherDescribe) { 23 this.weatherDescribe = weatherDescribe; 24 } 25 }
1、参考《Head First设计模式》和GoF《设计模式:可复用面向对象软件的基础》
2、代码可参考【github传送门】、UML类图参考【github传送门】
浅析设计模式(七)——创建型模式之Builder(建造者模式)
标签:ack 代码 back 分享 pat http 理解 target col
原文地址:https://www.cnblogs.com/wpbxin/p/9313466.html