zoukankan      html  css  js  c++  java
  • 视频项目时长的存储和程序设计方案---单例模式节省内存空间以及自定义注解

     一、苹果设备按钮(表单)样式外观设置

    在苹果设备上,按钮等表单控件默认有苹果风格的外观,如图所示

     

    如果需要需要和网页上显示一样的效果则需要修改以下的样式

    如图网页效果

     

    Css样式     -webkit-appearance:none;

    -webkitiOSAndroid浏览器的内核名称

    -moz     Firefox内核名称

    -o     Opera

    二、关于视频项目时长的存储和程序设计方案

    数据库存储时使用int,而不是time,原因:

        int存储可以保存更大的值,比如对所有视频的时长求和会超过1000小时

        int存储可以很方便的计算,很方便进行比较

           (如:筛选时长大于1小时小于2小时的视频)

            不需要太多的类型转换和函数调用

    在程序层面,为了提升用户体验,需要能够把秒数转换成“时间格式”01:30

    TimeLength   [数据模型] 将秒数转换成  ---> 小时:分钟:秒,也能实现反向转换

    TimeLengthFormatter  [格式化器]   SpringMVC结合,让SpringMVC能够TimeLength的转换功能

    @TimeLengthFormat    [格式化注解]      可以应用到数据模型的属性上,让SpringMVC能够将表单数据绑定到数据模型的属性上

    TimeLengthFormatterAnnotationFormatterFactory

    TimeLengthFormatterFactory   [格式化器工厂]

     

    三、使用单例模式节省内存空间

    TimeLength很多时候会等于0,为了避免在内存中创建很多为0TimeLength对象、

          可以在TimeLenth类中增加一个public static final 的属性ZERO

              ZREO= new TimeLength(0,0,0);

    当程序中需要一个等于0TimeLength时,直接使用

        TimeLength.ZERO

        而不是自己 new TimeLength()

    这种情况通常要求类是不可变的,以防止ZERO内部被篡改

         这就要求去掉所有属性的setter方法

    四、判断对象的断言

         通常不能写 TestCase.assertEquals(obj,new Object());

          因为obj是现在已经存在的对象,而new Object()将创建一个新对象,

          已经存在对象和新对象一定不是同一个对象

    通常会用下面的方法写断言:

      方法1:通过toString()方法转换为字符串进行总量判断,前提是重写toString()方法

      方法2:通过比较各个属性值判断,进行分量判断

    五、自定义注解

    Retention注解

    Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:
    1.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
    2.CLASS —— 这种类型的Annotations编译时被保留,class文件中存在,JVM将会忽略
    3.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.

    @Target注解

     目标、位置,注解可以标注的位置

    Type   可以用在类、接口

    Field   用在字段上

    Parameter  用在参数上

    Method  用在方法上

    @Target:注解的作用目标

    @Target(ElementType.TYPE)   //接口、类、枚举、注解

    @Target(ElementType.FIELD) //字段、枚举的常量

    @Target(ElementType.METHOD) //方法

    @Target(ElementType.PARAMETER) //方法参数

    @Target(ElementType.CONSTRUCTOR)  //构造函数

    @Target(ElementType.LOCAL_VARIABLE)//局部变量

    @Target(ElementType.ANNOTATION_TYPE)//注解

    @Target(ElementType.PACKAGE) ///   

    Documented 注解

    Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.

    注意:定义注解使用的是@interface

    在主机内部可以定义一些“方法”,这些“方法”就是注解中的“命名参数”

    还可以使用defalut的命名参数

    TimeLengthFormatterFactory implements AnnotationFormatterFactory<TimeLengthFormat>

    格式化器注解工厂,负责将TimeLength小模型、

    @TimeLengthFromatTimeLengthFormatter 组合起来实现注解驱动的数据绑定,

    也就是将标记了@TimeLength Format注解的属性与表单提交的数据

      此工厂需要添加到SpringMVC的配置文件中

     


    MyBatis自定义类型转换器

    目标:将程序中的TimeLength对象转换成数据库中的int字段

        或者反向将数据库中的int转换成TimeLength对象

    方法:

      方法一:直接实现TypeHandler接口

      方法二:从BaseTypeHandle继承(已经处理了null的情况,推荐)

    TypeHandler类上标记注解以表明TypeHandler能够支持类型转换范围

        @MappedJdbcTypes     数据库类型  可以写多个类型

        @MappedTypes         java类型,可以写多个类型

     

  • 相关阅读:
    Java知识系统回顾整理01基础05控制流程02 switch
    Java知识系统回顾整理01基础05控制流程01if
    Java知识系统回顾整理01基础04操作符07Scanner
    Java知识系统回顾整理01基础04操作符06三元运算符
    Java知识系统回顾整理01基础04操作符05赋值操作符
    Java知识系统回顾整理01基础04操作符04位操作符
    Java知识系统回顾整理01基础04操作符03逻辑运算符
    leetcode-----74. 搜索二维矩阵
    leetcode-----73. 矩阵置零
    leetcode-----72. 编辑距离
  • 原文地址:https://www.cnblogs.com/yangxiansen/p/7860016.html
Copyright © 2011-2022 走看看