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

    运行结果:

  • 相关阅读:
    检测ORACLE方法汇总数据块损坏
    DHot.exe 热点新闻
    无效 URI: 故障分析证书颁发机构/主机
    lucene两个分页操作
    求职技巧—2014六个秘诀二
    ubuntu下一个rootusername入口mysql,如何查看username和password,如何改变rootpassword
    LeetCodeOJ. Maximum Depth of Binary Tree
    基于用户的推荐协同过滤算法的算法
    《C++ Primer Plus》学习笔记10
    m_Orchestrate learning system---八、下拉列表(select标签)如何实现链接功能
  • 原文地址:https://www.cnblogs.com/chen1-kerr/p/7092121.html
Copyright © 2020-2023  润新知