【创建型模式】《大话设计模式》——读后感 (8)好菜每回味不同——建造者模式之经典案例(2)

本文参考地址: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);
    }
    
}

运行结果:

原文地址:https://www.cnblogs.com/chen1-kerr/p/7092121.html