知识大全 设计模式-快餐简解-建造者模式

Posted

篇首语:吃的苦中苦,方为人上人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 设计模式-快餐简解-建造者模式相关的知识,希望对你有一定的参考价值。

  【建造者模式应用场景举例

  比如在玩 极品飞车 这款游戏 那么每一关的地图会千变万化 简单的来说 地图会有晴天和阴天之分 那么创建地图时就要根据晴天或者阴天来对地图上的场景 比如 天空 树 房子 和路面进行渲染 这个过程是一个固定的 每创建一个新地图都要执行这几个渲染 这是针对高级配置的电脑来说的

  现在拥有低配置电脑的人不在少数 那么他们就不能玩游戏了吗?完全可以!只要将地图中占用资源比较高的渲染去掉就可以 比如带反射光影的树 这时候需要创建不同的地图 但地图的创建过程却是固定的 建造者模式完全可以应对这样的情况

  【建造者模式解释

  类型 创建模式

  将一个复杂对象的构建与它的表示分离 使得同样的构建过程可以创建不同的表示

  【建造者模式UML图

  

  【建造者模式 JAVA代码实现

  新建地图接口

   package map_package;public interface map_interface     public void create_weather();    public void create_house();    public void create_tree();    public void create_way();

  新建晴天地图类

   package map_package;public class map_sun implements map_interface     public void create_weather()         System out println( 晴天 );        public void create_house()         System out println( 房了上玻璃发亮 );        public void create_tree()         System out println( 树的颜色是浅绿色 );        public void create_way()         System out println( 路面有些干燥 );    

  新建阴天地图类

   package map_package;public class map_cloudy implements map_interface    public void create_weather()         System out println( 阴天 );        public void create_house()         System out println( 房了上玻璃发暗 );        public void create_tree()         System out println( 树的颜色是深绿色 );        public void create_way()         System out println( 路面有些潮湿 );    

  新建高画质builder建造者类

   package map_build;import map_package map_interface;public class map_build_adv     private map_interface map_interface_ref;    public map_build_adv(map_interface map_interface_ref)         super();        this map_interface_ref = map_interface_ref;        public void create_map()         System out println( 创建一个高画质的地图 );        // 创建的顺序很重要 从天空往路面创建        map_interface_ref create_weather();        map_interface_ref create_house();        map_interface_ref create_tree();        map_interface_ref create_way();    

  新建低画质builder建造者类

   package map_build;import map_package map_interface;public class map_build_low     private map_interface map_interface_ref;    public map_build_low(map_interface map_interface_ref)         super();        this map_interface_ref = map_interface_ref;        public void create_map()         System out println( 创建一个低画质的地图 );        // 创建的顺序很重要 从天空往路面创建        map_interface_ref create_weather();        map_interface_ref create_house();        // map_interface_ref create_tree();将创建树的过程去掉        map_interface_ref create_way();    

  新建客户端运行类

   package run_main;import map_build map_build_adv;import map_build map_build_low;import map_package map_cloudy;import map_package map_sun;public class run_main     public static void main(String[] args)         map_cloudy map_cloudy = new map_cloudy();        map_build_adv map_build_adv = new map_build_adv(map_cloudy);        map_build_adv create_map();        System out println();        map_sun map_sun = new map_sun();        map_build_low map_build_low = new map_build_low(map_sun);        map_build_low create_map();    

  程序运行结果如下

   创建一个高画质的地图阴天房了上玻璃发暗树的颜色是深绿色路面有些潮湿创建一个低画质的地图晴天房了上玻璃发亮路面有些干燥

  从程序中可以看到 建造者模式将不变的创建过程进行封装 创建的过程与main分法进行分离 这样内部的创建过程就和表示层的代码进行分开 有利于创建过程功能上的修改 另外可以发现 代码的设计和功能有些类似于facade外观模式 区别在于 建造者模式目的在于以相同的构建过程通过不同的建造者得到不同的结果 而外观模式并不需要不同的建造者 也不希望得到不同的结果 只是简单的将几个接口合并成高级的一个接口 不影响原有的结果 目的是使调用变得更加容易

  本程序中有 个建造者 高画者建造者和低画质建造者 它们都封装了创建地图的过程 这个过程很固定 但通过不同的建造者类可以返回不样式的地图 建造者规定了对象创建的过程 比如高画质的建造者的创建过程为

   map_interface_ref create_weather();map_interface_ref create_house();map_interface_ref create_tree();map_interface_ref create_way();

  必须得执行 个方法才可以创建一个高画质的地图 如果不使用建造者模式 直接调用map类的create_xxxx方法 如果create_xxxx方法有几十个 那么很有可能就把其中的某些方法忘记调用而影响最终地图的效果了 所以我们要使用建造者模式来规定地图创建的过程 这就是一个 行为守则

  【建造者模式 MyEclipse 项目JAVA代码实现

cha138/Article/program/Java/gj/201311/27540

相关参考