zoukankan      html  css  js  c++  java
  • 【创建型模式】《大话设计模式》——读后感 (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);
        }
        
    }

    运行结果:

  • 相关阅读:
    C# 获取数组最小下标或最大下标
    使用EPplus 打开Excel报错
    EPplus的读写
    SQL Server 无法生成 FRunCM 线程
    WinForm无法加载'SQLite.Interop.dll'的问题
    雪花算法-唯一ID生成器
    .NET使用AutoResetEvent实现多线程打印奇偶数
    docker安装Elasticsearch+Kibana+密码配置+Kibana中文设置
    语义化版本 2.0.0
    Chrome 上所有受限端口的列表
  • 原文地址:https://www.cnblogs.com/chen1-kerr/p/7092121.html
Copyright © 2011-2022 走看看