毕业于贵州大学大数据与信息工程学院,目前是一名移动端工程师,就职于北京乾元大通信息技术有限责任公司。
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。
SwipeRefreshLayout组件只接受一个子组件:即需要刷新的那个组件。它使用一个侦听机制来通知拥有该组件的监听器有刷新事件发生,换句话说我们的Activity必须实现通知的接口。
@Entity -- 实体注解 public @interface Entity { /** * 在数据库中表的名称,默认为实体的类名 */ String nameInDb() default ""; ...
gradle添加依赖 ```groovy // In your root build.gradle file: buildscript { repositories { jcenter() } dependencies { classpath 'com.
menu代码如下 效果如图: 图1.png 将代码修改,如下: 即在每个item节点中添加 android:showAsAction="always" ...
添加依赖 compile 'com.airbnb.android:lottie:2.2.0' 下载lottie-android 将项目中的示例中的assets文件夹拷贝到自己新建的项目 设置布局并运行项目,即可看到效果 高...
Java Reflect(反射)机制详解 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
基本框架 编写一个类来继承GLSurfaceView.Renderer,并实现其中的三个方法onSurfaceCreated、onSurfaceChanged、onDrawFrame。
ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量。
J2SE5.0版本在 java.lang.annotation提供了四种元注解,专门注解其他的注解: @Documented –注解是否将包含在JavaDoc中 @Retention –什么时候使用该注解 @Target –注解用于什么地方 @Inherited – 是否允许子类继承该注解 @Documented–一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。
MediaRecorderAudioRecord MediaRecorder 需要的权限 /** * 开始录音 */ class startRecordListener implements OnClickList...
本文使用mina-2.0.16.jar Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。
在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据库,按块处理要比按字节处理数据快的多。
ThreadPoolExecutor使用 /** * ThreadPoolExecutor 使用测试类 * 在java doc中,并不提倡我们直接使用ThreadPoolExecutor, * 而是使用Executors类中提供的几个静态方法来创...
基于“对称密钥”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等。 代码中用到的Base64与BouncyCastleProvider的jar包可在本文末尾下载源码,从源码获取jar包。
MD5加密 MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
异常 Error:Could not find com.android.tools.build:gradle:2.2.2. Searched in the following locations: https://repo1.
本示例功能为点击按钮,弹出对话框,自定义AlertDialog的布局View,获取输入框EditText中的内容,点击确定按钮以及空白处不关闭对话框。 创建布局文件,设置按钮的点击事件。
Retrofit2的基础使用请参考Java Retrofit2使用 自定义Converter(转换器) retrofit默认情况下支持的converts有Gson,Jackson,Moshi... 搭建基础架构 这里将自定义一个FastJsonConverterFactory来解析返回的数据,其内部使用阿里巴巴的Fastjson(依赖添加compile 'com.alibaba:fastjson:1.2.37')。
本文使用eclipse编辑器,gradle依赖jar,如若未配置此环境,请转Java Eclipse配置gradle编译项目配置好环境后再查看此文 在build.
本文使用eclipse编辑器,gradle依赖jar,如若未配置此环境,请转Java Eclipse配置gradle编译项目配置好环境后再查看此文 在build.
实现类似定时器功能 依赖 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.3' 2.布局文件中只是简单的TextView控件来显示文本。
本文使用eclipse编辑器,gradle依赖jar,如若未配置此环境,请转Java Eclipse配置gradle编译项目配置好环境后再查看此文 创建Gradle(STS) Project工程,并删除其他一些不需要的文件。
Grandle官网下载Gradle,地址:https://gradle.org/releases/ 下载完毕,直接把zip解压,放到你电脑的软件安装目录下,例如:D:\gradle; 3.打开eclipse,Help-->Install new software,输入http://dist.springsource.com/release/TOOLS/gradle,中间区域选项全选,然后一直按下一步,安装完毕,重启eclipse就可以了。
当服务未开启时,快速的跳转到开启服务的界面。 if (!OpenAccessibilitySettingHelper.isAccessibilitySettingsOn(this, AccessibilitySampleService.
创建一个类AccessibilitySampleService继承自AccessibilityService,并实现其接口方法,onAccessibilityEvent与onInterrupt。
使用CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、FloatingActionButton制作连动布局。
Android Studio依赖RecyclerView, 在使用该控件的module节点下的build.gradle中的dependencies内添加compile 'com.android.support:recyclerview-v7:25.3.1',使用gradle同步后即可使用。
在配置文件AndroidManifest.xml中配置权限 在配置文件AndroidManifest.xml中的activity接下内配置属性android:configChanges="keyboard|screenSize|orientation|layoutDirection" application接下配置如下: 在相应的Activity中重写onConfigurationChanged方法,在此方法中获取屏幕的信息。
首先创建通过单例获取到MimeTypeMap的对象。 MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); 判断这个集合中是否存在这个MIME类型。
播放音频 首先创建出一个MediaPlayer对象 MediaPlayer mMediaPlayer = new MediaPlayer(); 设置声音源 public static final String FILENAME = "deserve.
Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
工具aapt.exe 此工具在sdk/build-tools/xxx/下,xxx代码SDK版本号。 将此路径添加到环境变量中或者将要获取信息的apk放入此路径下,当然不建议后者。
本文主要写在同一个module中如何使用不同进程的服务。 在测试机的/mnt/sdcard/路径下放一首mp3格式的音乐文件,故音乐文件的路径为/mnt/sdcard/music.mp3。
在测试机的/mnt/sdcard/路径下放一首mp3格式的音乐文件,故音乐文件的路径为/mnt/sdcard/music.mp3 在Android Studio中创建一个空的Android项目,在项目下新建client与server两个module。