本文参考地址:http://www.cnblogs.com/xieweikai/p/6826481.html
建造者模式应用场景
比如在玩“极品飞车”这款游戏,那么每一关的地图会千变万化,简单的来说,地图会有晴天和阴天之分,那么创建地图时就要根据晴天或者阴天来对地图上的场景,比如:天空,树,房子,和路面进行渲染,这个过程是一个固定的,每创建一个新地图都要执行这几个渲染,这是针对高级配置的电脑来说的。
现在拥有低配置电脑的人不在少数,那么他们就不能玩游戏了吗?完全可以!只要将地图中占用资源比较高的渲染去掉就可以,比如带反射光影的树,这时候需要创建不同的地图,但地图的创建过程却是固定的,建造者模式完全可以应对这样的情况。
建造者抽象接口:
package com.sjmx.builder.typic; public interface Map { public void create_weather(); public void create_house(); public void create_tree(); public void create_way(); }
建造者产品1:
package com.sjmx.builder.typic; public class MapCloudy implements Map { @Override public void create_weather() { System.out.println("阴天"); } @Override public void create_house() { System.out.println("房了上玻璃发暗"); } @Override public void create_tree() { System.out.println("树的颜色是深绿色"); } @Override public void create_way() { System.out.println("路面有些潮湿"); } }
建造者产品2:
package com.sjmx.builder.typic; public class MapSun implements Map { @Override public void create_weather() { System.out.println("晴天"); } @Override public void create_house() { System.out.println("房了上玻璃发亮"); } @Override public void create_tree() { System.out.println("树的颜色是浅绿色"); } @Override public void create_way() { System.out.println("路面有些干燥"); } }
高画质指挥者:
package com.sjmx.builder.typic; public class DectorHigh { public static void create_map(Map map) { // 创建的顺序很重要 从天空往路面创建 map.create_weather(); map.create_house(); map.create_tree(); map.create_way(); } }
低画质指挥者:
package com.sjmx.builder.typic; public class DectorLow { public static void create_map(Map map) { // 创建的顺序很重要 从天空往路面创建 map.create_weather(); map.create_house(); // map.create_tree(); map.create_way(); } }
客户端:
package com.sjmx.builder.typic; public class Client { public static void main(String[] args) { MapSun sun = new MapSun(); MapCloudy cloudy = new MapCloudy(); System.out.println("高画质游戏场景:"); DectorHigh.create_map(sun); System.out.println(""); DectorHigh.create_map(cloudy); System.out.println("-------------------"); System.out.println("低画质游戏场景:"); DectorLow.create_map(sun); System.out.println(""); DectorLow.create_map(cloudy); } }
运行结果: